Chinaunix首页 | 论坛 | 博客
  • 博客访问: 280545
  • 博文数量: 63
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 1130
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-17 12:58
文章分类

全部博文(63)

文章存档

2009年(59)

2008年(4)

我的朋友

分类: Java

2009-09-18 23:01:36

1.创建一个Rectangle类,添加两个属性width和height。在Rectangle类中添加两个方法,计算矩形的周长和面积。

利用Rectangle类输出一个矩形的周长和面积。

2.根据Time1类和Time2类,设计一个Date类,具有年、月,日3个成员变量和合适的构造函数,同时具有按“YYYY/MM/DD”输出等方法。


3.创建一个Fraction类执行分数运算,要求如下:
1.用整形数表示类的private成员变量:f1和f2。
2.提供构造函数,将分子存入f1,分母存入f2。
3.提供两个分数相加的运算方法,结果分子存入f1,分母存入f2。
4.提供两个分数相减的运算方法,结果分子存入f1,分母存入f2。
5.提供两个分数相乘的运算方法,结果分子存入f1,分母存入f2。
6.提供两个分数相除的运算方法,结果分子存入f1,分母存入f2。
7.以f1/f2的形式打印Fraction数。
8.以浮点数的形式打印Fraction数。
9.编写主函数运行分数运算。




  内嵌类Inner Class)

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1.内嵌类可以访问outer类的任何变量,包括私有的.

  2.静态inner类,只能访问outer类的任何static变量

  2.1内嵌类可以是final,abstract的

  3.**,方法内的内嵌类不能为static: void test(){ static class A{}} XXXXX!!!!

  4.**,方法内的内嵌类也不能带任何modifier,void test(){ public class A{}} XXXXX!!!!

  5.**,方法内的内嵌类只能访问方法内的final变量,但是,可以访问outer类的任何变量.

  6.匿名类不能有构造器,但声明时候带参数,相当于构造器的参数传递.

  class ABC{}

  class ABCD{private ABCD(int i){}}

  ABC test3(){return new ABC(){};}

  ABCD test4(){return new ABCD(3){};}

  interface iii{}

  iii test5(){return new iii(){};}

  //class BCD extends ABCD{} compile error,因为,

  看上面就知道,new iii(){};实际上匿名类实现了iii接口;new ABC(){};实际上是匿名类继承了ABC.

  8.???

  class A {private A(){System.out.println("a!");}}

  class B extends A{}

  **,没错!B实例的时候会主动调用父类A的构造,即使是private的,看来也没问题!!!

  9.内部类可以有synchronized方法,那么锁是这个内部类,跟外部类没一点关系,内外分别的,在锁的问题上.

  10.外部类不能通过this被访问,this这时候应该指的是内部类,享用外部类的成员就直接用,不用加任何限定词

  11.如何用this呢?请看:

以下是引用片段:
  class Outer{ int i;
  class Inner{
  class InnerInner{
  Outer.this.i=1;
  }
  }
  }
  }


  看见了吧,类名.this.变量名,可以引用到i,第一次看到吧,嘿嘿,孤陋寡闻.
  12.注意这两种写法都可以

  Class Outer.Inner i = new Outer().new Inner();

  或者, Class o= new Outer(); Class Outer.Inner i=o.new Inner();

  线程Thread)

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ?????去看Thread的API!!!!

  1.线程启动必须通过start函数.

  2.run函数不许也只能是public的.

  3.线程有优先级从1到10,通过Thread.setPriority(int);来改变,不能超过10,否则会出现运行异常

  4.线程优先级默认是5,即NORM_PRIORITY.????????NORM_PRIORITY是Thread的静态变量吗?

  5.????Thread.yeild();是静态方法,所以,使用格式是Thread.yield();她强迫当前的进程放弃CUP.

  6.sleep(1000),是说线程睡觉1秒,然后,进入Ready状态,注意,不是运行状态,它还要等OS来调度来获得CUP.

  java.lang.*;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1.数组的科隆: int ia[][]={{1,2},null}; int ib[][]=(int[][])ia.clone();

  2.什么是NaN?????然后看ceil(NaN),floor(NaN),...

  3.Math.floor(-1.1f);//-2.0

  Math.ceil(-1.1f);//-1.0

  Math.round(-1.6d)//-2

  4.0=

  5.Math,Interger,Boolean...等类型包装类都是final的,不可继承

  6.int round(float); long round(double);唉,round永远返回不了小数点

  7.static double ceil(double)

  8.static double floor(double)注意,ceil,floor的只有这个double版本,什么都转成double!

  9.static double sin(double 弧度); 还有cos,tan

  10. new String; ?可以是byte[];char[];String;StringBuffer

  11. String的一些函数: int length(); char charAt(int); String toUpperCase(); String toLowerCase();

  12. String("Abc").equals(String("abc"))不相等的,不然就不会有boolean equalsIgnoreCase(String)函数

  13."012345678"是一个串的顺序号码,indexOf(1),indexOf("1")都返回1,subString(1,5)是2345,嘿嘿:是的感觉

  14, trim()连tab都退毛,\t\n java ,trim()一下就只剩下java了

  15. 关于对象的科隆,去喳喳API??????????????????????

  16. abcd.trim(),abcd + new String(ef)都是合理的写法

  17. StringBuffer的3个构造器:()初始化容量为16,(int 初始化容量),(String),初始化容量为串长加上16

  18. StringBuffer的一些函数: String toString();append();reverse();insert();delete(int start,int end);deleteCharAt

  (int);setLength(int newLength);

  19. String s=""; StringBuffer sb=new StringBuffer(); if (s==sb){}编译错!因为,s,sb类型不一样,不能比较 集合:

  1.各接口和类的关系,只有最后一个是类

  Collection:List:vector,ArrayList,LinkedList

  Map:SortedMap:TreeMap

  Collection:Set:SortedSet:TreeSet

  Map:HashTable

  Collection:Set:HashSet

  基础base)

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1.java application的main可以不是public的.但必须是static的

  2.一个文件只能有一个public类,而且还得跟文件名一样,包括大小写

  3.变量只能是字母,$,_开头,接下来的第二个可以是,数字

  4.ch\u0061r=a; char \u0063=b; char c=\u0063;都是合法的

  5.1e-5d,合法.e-5d不合法,必须有前面的系数

  6.int[] i[]={null{1,2}}正确! int i[]={1,2,3,} 正确!","和没有的效果一样

  7.局部array,跟变量一样,使用前要初始化

  8.main方法可以为final

  操作符和分配符(Operator and Assignment)

  1.System.out.printl(1+2+"3");//33 System.out.printl("1"+2+3);//123

  2.int i=0; i=i++;i=i++;i=i++; 结果,i=0!

  3.int i[]; index=0; i[index]=index=5; 结果是,i[0]=5;!!!

  4.byte b=10;可以,因为,10可以被自动从int转成byte

  5.接下来,byte b=b+10;不可以!!因为,10+b后的int无法被自动从int转成byte,问我,我也不知道为什么!靠!

  6.byte b1 = 4; byte b2 = 6; b1 = b1 + b2;错!编译错!b1 + b2后,必须强制转成byte,b1x1+b2);

  7.XOR 一样的为0,不一样为1 1,1=0;0,0=0;1,0/0,1=1

  8. x == Float.NaN编译错,应该是Float.IsNaN

  9. x == Double.POSITIVE_INFINITY编译可以

  10.-1是1111.... 1111,<<永远右补零,>>正补零,负补一,>>>恒补零

  10.1 -1>>多少位都是-1 ; 1<<31变成了最小负数,1000....0000

  11.最大正数是01111....1111

  12.最小负数是1000....0000(-2147483648)

  13. a instanceof b,b必须是类/接口,不能是实例

  -------补充------------------------------

  1. byte,short,char 都存在 var = -var;编译错误,因为,这时候的-var已经自动转成个int类型了

  2. int/0会扔出ArithmeticException double,float/0得INF或者-INF0/0得NaN

  3. int a-b-c;是不符合命名规则的变量名????编译会出错.

  4. char a=\u0001;对! char b=\u0001;编译错!

  5. boolean b1,b2,b3,b4,b5;

  b1 = b2==b3;

  b1 = b2<=b3 && b4==b5;

  b1 = b2==b3==true

  都是对的!

  b1 = b2==b3==b4 XXXXXXX编译错!

  6. 1>>1 是0

  7. %=, ==, =都是合法符号

  8. --1-10*4 这种写法没错,就是 (--1)-10*4

  9. k=1;++k + k++ + +k ;结果是7,相当于 (++2)+(2++)+(+3)

  10.标号不能标示声明.

  hi:

  if {

  break hi;

  //break hi1;不行,不能向后调转

  }

  //hi1:不行,不能放在声明前

  int i;

  hi1:

  i=1;

  11.public static void main(String s[]) throws Exception{}可以噢,main可以扔出异常

  12. hi:

  if(b==true){break hi;}

  break 标号,可以用在if里面.别的任何都不行,包括break,continue 标号.

  13.int x = i*-j; **,没问题的!!!编译没错! int x = i*j++ + +i++; 这个也没问题,
  变量修饰符(Modifier)

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1.最外面一层的类不能声明成protect和pravite的

  2.同一个类的两个实例之间可以访问彼此的私有方法和私有变量,酷

  3.protect和无修饰符的具体区别???????关于外包可以访问被子类访问的是哪个?

  4.成员变量被修饰成final后,必须声明时候就赋初值或者在构造器里面赋初值,别指望她可以得到default值.

  5.抽象方法不能是static的!!!

  6.静态方法将随着类的变化而变化,看例子:

  class Parent{

  static void test(){System.out.println("hi,parent")};

  }

  class Child extends Parent{

  static void test(){System.out.println("hi,child")};

  }

  Parent p = new Child();

  p.test(); //打出来的是hi,parent!

  7.静态方法可以通过类的实例调用. new Child().test(); 和 Child.test(); 都OK!

  8.transient只能用在类的成员变量上,不能用在方法里.

  9.transient变量不能是final和static的

  10.native方法可以是private,abstractd的

  流程控制

  1.不可到达的语句声明为错:while(false){} ;for(;false{};if(false){}都无法编译

  2.for(第一部分;的第一部分可以用来声明或者赋值,但不能两者都

  3.byte b; switch { case 200: // 200 not in range of byte,因为200超过b的范围,将编译错误

  4.带标签的continue回达到标签的位置,从新进入紧接在标签后面的循环

  5.带标签的break会中断当前循环,并转移到标签标示的的循环的末尾

  转型和上溯(Converting and Casting)

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Binary operators convert the smaller(less precise) operand to the type of the larger(more precise) operand.

  All operators will convert things smaller than ints to ints or larger. This includes char s!

  1.byte,char,short默认转成int

  2.byte,short,int,long,float,double char^ 这是默认可以转型的方向,反了必须要显式cast! 特别注意:long->float是默认的,别看

  long64,float32,还有就是看得出来,char和 byte,short之间无法互相默认转换

  3.float f=1/3; OK!float f=1.0/3.0;编译出错,因为1.0/3.0结果是double的,噢噢~,错喽!!

  4.int i=1; byte b=i;错!需要显式cast. final i=1; byte b=i;就ok!

  我也不知道为什么,final就可以.而且,据我实验只有int和byte的关系这样,其他不行.

  5.int i[]; Object[] obj=i;错! Object obj=i;对!

  数组只能转成Object,而不能是Object[]

  6.int i[]; Object[] obj;i=(int[])obj; 对! 对象可以通过显式来转成一个数组.

  I/O

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1.File类的一些重要方法:isFile();isDirectory();String[] list();exists();getAbsolutePath();getParent();

  2.通过delete();mkdir();rename(File newname);可以操纵文件,但是却改变不了文件的内容

  2.1 File类无法改变当前目录,除非重新创建一个File对象.

  3.InputStreamReader(InputStream in,String encodingName);

  OutputStreamReader(OutputStream in,String encodingName);

  Encoding: 8859_1是Latin-1,包含ASCII

  4.关闭close一个流,就自动调用了flush.

  5.System.in,System.out,System.err,由JVM自动创建

  6.RandomAccessFile(File file,String mode);mode有,r,rw

阅读(1299) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~