分类: Java
声明:此文非原创,因给了我很大的学习帮助,故共享出来!若作者有异议请告之。
注意:原文在此有一些改动!
1。switch里面只能是short,int,char,byte的。
2。if(a="a")编译错,if(a=false)编译ok,原因是a=false的a代表了个boolean值
3。这种写法Outer。Inneri=new Outer()。newInner();OK!
4。文件里,8默认是int,8.0默认是double
5。八进制是0开头,不是O(英文o)
6。byte-128~127,-128是二进制的多少?
7。-1>>32还是-1,-1>>>32为什么还是-1?
8。charc=´c´;Strings="s";s+=c;结果是sc!!!
9。booleanb1=true;booleanb2=true;System.out.println(b1|b2);结果是true。编译没错!
10。java的默认import包有哪些?
类和对象(ClassandObject)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0。最外层的类可以声明成final:"$filea":<final classa{}>ok!,但是不能是private和static的。
1。overload是同类里同样的方法名,override是父子的继承
2。override的返回结果必须一样,否则编译错哦
2。1override的modifier可以扩大,但是不能缩小。比如父类private void test(){}子类:public void test(){},没问题;如果反了,就死翘翘了!
3。super。super(),靠,错的,没这么写的!
4。static和非static之间永远无法override!
5。看程序
public classA{
void test1()throws BaseEx{hi();}
void hi(){System.out.println("say hi,a");}
}
class AA extends A{
void hi(){System.out.println("say hi,aa");}
}
class test{
static void main(Stringb[])throws Exception{
Aa=new AA();
a.test1();
}
}
结果是,"say hi,aa",这说明什么?说明,方法永远跟着类的原来面目走;而,变量恰恰相反!
6。一个非抽象方法死活也别想override成一个抽象方法
7。override的子类的方法抛出的的异常只能是父类方法抛出异常的子异常类,或者无!
8。构造器不能是native,final,static,synchronized的,可以是public,private,什么都没有的,呵呵
9。构造器函数里还可以写return呢,但后面什么都不许有,甚至null(这不是废话吗,哈哈)
10。构造器不能返回值。这大家都知道,但如果有个"构造器"反值了,别紧张,它就不是构造器喽,只是个普通函数
11。super();this();这两个函数只能在构造函数里调用。
12,成员变量声明时候赋值,比构造函数还早。int i=1;ealierthanTest(){}
13。方法的参数变量可以是final。
14。hashCode返回一个int
15。voidwait()throws InterruptExceptionwait扔InterruptException异常
16。java.lang.Void是void的包装类
17。Byte,Interger,Double......所有的跟数有关的包装类都是继承于Number
接口(Interface)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。接口的所有方法默认都是public,abstract和non-static的
2。接口的所有变量默认都是public,static,final的。所以,接口的变量不能改值,在它的实现类里。
3。接口的实现类实现的方法必须和接口的方法抛出同样的异常,不许是子类,这和override不一样!同样,如果接口方法没有抛,实现方法也不能抛。
4。实现类实现的方法必须显式的声明成public,什么都不写都不行,啊!!!
5。接口不能声明成final,要不它怎么被实现呢(这好像又是废话啊
6。一个类实现两个接口,如果两个接口有相同的方法,实现类就实现这个方法,没问题的。
内嵌类(InnerClass)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。内嵌类可以访问outer类的任何变量,包括私有的。
2。静态inner类,只能访问outer类的任何static变量
2。内嵌类可以是final,abstract的
3。方法内的内嵌类不能为static:如:void test(){static classA{}}
4。方法内的内嵌类也不能带任何modifier:如:void test(){public classA{}}
5。方法内的内嵌类只能访问方法内的final变量,但是,可以访问outer类的任何变量。
6。匿名类不能有构造器,但声明时候带参数,相当于构造器的参数传递。
class ABC{}
class ABCD{ private ABCD(int i){}}
ABCtest3(){return new ABC(){};}ABCDtest4(){return new ABCD(3){};}
interface iii{}
iiitest5(){return new iii(){};}
class BCD extends ABCD{} 编译会出错,因为BCD继承的是ABCD的不带参数类,而父类只有一个带参数的类,所以只有在父类中加一个不带参数的类就不会出错!
看上面就知道,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{
void Test(){
Outer.this.i=1;
}
}
}
}
看见了吧,类名。this。变量名,可以引用到i,第一次看到吧,嘿嘿,孤陋寡闻。
线程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\njava",trim()一下就只剩下"java"了
15。关于对象的克隆,去查查API......
16。"abcd".trim(),"abcd"+newString("ef")都是合理的写法
17。StringBuffer的3个构造器:()初始化容量为16,(int初始化容量),(String),初始化容量为串长加上16
18。StringBuffer的一些函数:String toString();append();reverse();insert(); delete(intstart,intend);deleteCharAt(int);setLength(intnewLength);
19。String s="";StringBuffer sb=newStringBuffer();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´;charc=´\u0063´;都是合法的
5。1e-5d,合法。e-5d不合法,必须有前面的系数
6。int[]i[]={null{1,2}}正确!int i[]={1,2,3,}正确!","和没有的效果一样
7。局部array,跟变量一样,使用前要初始化
8。main方法可以为final
操作符和分配符(OperatorandAssignment)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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,不一样为11,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。ainstanceof b,b必须是类/接口,不能是实例
--------补充------------------------------
1。byte,short,char都存在var=-var;编译错误,因为,这时候的-var已经自动转成个int类型了
2。int/0会扔出ArithmeticException
double,float/0得INF或者-INF
0/0得NaN
3。inta-b-c;是不符合命名规则的变量名编译会出错。
4。chara=´\u0001´;对!charb=\u0001;编译错!
5。boolean b1,b2,b3,b4,b5;
b1=b2==b3;
b1=b2<=b3&&b4==b5;
b1=b2==b3==true
都是对的!
b1=b2==b3==b4XXXXXXX编译错!
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;
//breakhi1;不行,不能向后调转
}
//hi1:不行,不能放在声明前
inti;
hi1:
i=1;
11。public static void main(Strings[])throwsException{}可以噢,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 Childe xtends 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{case200://200notinrangeofbyte,因为200超过b的范围,将编译错误
4。带标签的continue回达到标签的位置,从新进入紧接在标签后面的循环
5。带标签的break会中断当前循环,并转移到标签标示的的循环的末尾
转型和上溯(ConvertingandCasting)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。byte,char,short默认转成int
2。byte->short->int->long->float->double
这是默认可以转型的方向,反了必须要显式cast!特别注意:long->float是默认的,别看long 64,float 32,
还有就是看得出来,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(Filenewname);可以操纵文件,但是却改变不了文件的内容
2。File类无法改变当前目录,除非重新创建一个File对象。
3。InputStreamReader(InputStreamin,StringencodingName);
OutputStreamReader(OutputStreamin,StringencodingName);
Encoding:8859_1是Latin-1,包含ASCII
4。关闭close一个流,就自动调用了flush。
5。System.in,System.out,System.err,由JVM自动创建
6。RandomAccessFile(Filefile,Stringmode);mode有,r,rw
分类: Java
声明:此文非原创,因给了我很大的学习帮助,故共享出来!若作者有异议请告之。
注意:原文在此有一些改动!
1。switch里面只能是short,int,char,byte的。
2。if(a="a")编译错,if(a=false)编译ok,原因是a=false的a代表了个boolean值
3。这种写法Outer。Inneri=new Outer()。newInner();OK!
4。文件里,8默认是int,8.0默认是double
5。八进制是0开头,不是O(英文o)
6。byte-128~127,-128是二进制的多少?
7。-1>>32还是-1,-1>>>32为什么还是-1?
8。charc=´c´;Strings="s";s+=c;结果是sc!!!
9。booleanb1=true;booleanb2=true;System.out.println(b1|b2);结果是true。编译没错!
10。java的默认import包有哪些?
类和对象(ClassandObject)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0。最外层的类可以声明成final:"$filea":<final classa{}>ok!,但是不能是private和static的。
1。overload是同类里同样的方法名,override是父子的继承
2。override的返回结果必须一样,否则编译错哦
2。1override的modifier可以扩大,但是不能缩小。比如父类private void test(){}子类:public void test(){},没问题;如果反了,就死翘翘了!
3。super。super(),靠,错的,没这么写的!
4。static和非static之间永远无法override!
5。看程序
public classA{
void test1()throws BaseEx{hi();}
void hi(){System.out.println("say hi,a");}
}
class AA extends A{
void hi(){System.out.println("say hi,aa");}
}
class test{
static void main(Stringb[])throws Exception{
Aa=new AA();
a.test1();
}
}
结果是,"say hi,aa",这说明什么?说明,方法永远跟着类的原来面目走;而,变量恰恰相反!
6。一个非抽象方法死活也别想override成一个抽象方法
7。override的子类的方法抛出的的异常只能是父类方法抛出异常的子异常类,或者无!
8。构造器不能是native,final,static,synchronized的,可以是public,private,什么都没有的,呵呵
9。构造器函数里还可以写return呢,但后面什么都不许有,甚至null(这不是废话吗,哈哈)
10。构造器不能返回值。这大家都知道,但如果有个"构造器"反值了,别紧张,它就不是构造器喽,只是个普通函数
11。super();this();这两个函数只能在构造函数里调用。
12,成员变量声明时候赋值,比构造函数还早。int i=1;ealierthanTest(){}
13。方法的参数变量可以是final。
14。hashCode返回一个int
15。voidwait()throws InterruptExceptionwait扔InterruptException异常
16。java.lang.Void是void的包装类
17。Byte,Interger,Double......所有的跟数有关的包装类都是继承于Number
接口(Interface)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。接口的所有方法默认都是public,abstract和non-static的
2。接口的所有变量默认都是public,static,final的。所以,接口的变量不能改值,在它的实现类里。
3。接口的实现类实现的方法必须和接口的方法抛出同样的异常,不许是子类,这和override不一样!同样,如果接口方法没有抛,实现方法也不能抛。
4。实现类实现的方法必须显式的声明成public,什么都不写都不行,啊!!!
5。接口不能声明成final,要不它怎么被实现呢(这好像又是废话啊
6。一个类实现两个接口,如果两个接口有相同的方法,实现类就实现这个方法,没问题的。
内嵌类(InnerClass)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。内嵌类可以访问outer类的任何变量,包括私有的。
2。静态inner类,只能访问outer类的任何static变量
2。内嵌类可以是final,abstract的
3。方法内的内嵌类不能为static:如:void test(){static classA{}}
4。方法内的内嵌类也不能带任何modifier:如:void test(){public classA{}}
5。方法内的内嵌类只能访问方法内的final变量,但是,可以访问outer类的任何变量。
6。匿名类不能有构造器,但声明时候带参数,相当于构造器的参数传递。
class ABC{}
class ABCD{ private ABCD(int i){}}
ABCtest3(){return new ABC(){};}ABCDtest4(){return new ABCD(3){};}
interface iii{}
iiitest5(){return new iii(){};}
class BCD extends ABCD{} 编译会出错,因为BCD继承的是ABCD的不带参数类,而父类只有一个带参数的类,所以只有在父类中加一个不带参数的类就不会出错!
看上面就知道,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{
void Test(){
Outer.this.i=1;
}
}
}
}
看见了吧,类名。this。变量名,可以引用到i,第一次看到吧,嘿嘿,孤陋寡闻。
线程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\njava",trim()一下就只剩下"java"了
15。关于对象的克隆,去查查API......
16。"abcd".trim(),"abcd"+newString("ef")都是合理的写法
17。StringBuffer的3个构造器:()初始化容量为16,(int初始化容量),(String),初始化容量为串长加上16
18。StringBuffer的一些函数:String toString();append();reverse();insert(); delete(intstart,intend);deleteCharAt(int);setLength(intnewLength);
19。String s="";StringBuffer sb=newStringBuffer();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´;charc=´\u0063´;都是合法的
5。1e-5d,合法。e-5d不合法,必须有前面的系数
6。int[]i[]={null{1,2}}正确!int i[]={1,2,3,}正确!","和没有的效果一样
7。局部array,跟变量一样,使用前要初始化
8。main方法可以为final
操作符和分配符(OperatorandAssignment)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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,不一样为11,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。ainstanceof b,b必须是类/接口,不能是实例
--------补充------------------------------
1。byte,short,char都存在var=-var;编译错误,因为,这时候的-var已经自动转成个int类型了
2。int/0会扔出ArithmeticException
double,float/0得INF或者-INF
0/0得NaN
3。inta-b-c;是不符合命名规则的变量名编译会出错。
4。chara=´\u0001´;对!charb=\u0001;编译错!
5。boolean b1,b2,b3,b4,b5;
b1=b2==b3;
b1=b2<=b3&&b4==b5;
b1=b2==b3==true
都是对的!
b1=b2==b3==b4XXXXXXX编译错!
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;
//breakhi1;不行,不能向后调转
}
//hi1:不行,不能放在声明前
inti;
hi1:
i=1;
11。public static void main(Strings[])throwsException{}可以噢,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 Childe xtends 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{case200://200notinrangeofbyte,因为200超过b的范围,将编译错误
4。带标签的continue回达到标签的位置,从新进入紧接在标签后面的循环
5。带标签的break会中断当前循环,并转移到标签标示的的循环的末尾
转型和上溯(ConvertingandCasting)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。byte,char,short默认转成int
2。byte->short->int->long->float->double
这是默认可以转型的方向,反了必须要显式cast!特别注意:long->float是默认的,别看long 64,float 32,
还有就是看得出来,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(Filenewname);可以操纵文件,但是却改变不了文件的内容
2。File类无法改变当前目录,除非重新创建一个File对象。
3。InputStreamReader(InputStreamin,StringencodingName);
OutputStreamReader(OutputStreamin,StringencodingName);
Encoding:8859_1是Latin-1,包含ASCII
4。关闭close一个流,就自动调用了flush。
5。System.in,System.out,System.err,由JVM自动创建
6。RandomAccessFile(Filefile,Stringmode);mode有,r,rw