java基础2
1 . 关键字strictfp只能用来修饰类和方法,不能用来修饰变量。声明一个类为strictfp意思说该类中的任何方法都会遵守浮点(运算)的IEEE754标准。如果没有说明,则方法中用到 的浮点(运算)可能是平台不独立。
2 . 抽象类(abstract)的方法前也可以用abstract关键字修饰,但是一定要注意用该关键字修饰的方法(函数)是以“();”结尾而不是以“{}”结尾的!另外,只要类中有一个方法是abstract类型的,则整个类都必须声明为abstract型的。然而如果在抽象类中存在非抽象的方法则是合法(允许)的。备注:子类必须实现抽象父类的所有抽象方法,除非该子类也是一个抽象类。
publicabstract class A {
abstract void foo();
}
class B extends A {
void foo(int I) {
}
}
这段代码是错误的,因为虽然子类实现了一个方法foo,但是该方法只是对父类方法的重载(overload)不是重叠(override),因为两个方法的参数不同,故编译会出错。备注:抽象方法不能是final或private类型,因为抽象方便必须被子类继承。
3 . 实例变量(instancevariable)就是指类成员变量(member),能够使用public、protected、和private修饰符。同时也能使用transient、final、abstract、strictftp、native修饰符。
切记:对于final类型的实例变量,必须在声明的时候就手工给它赋,因为构造函数不会给他自动赋值,不然编译会出错,另外记住:transient只用在实例变量上,同理volatile也是一样。
4 . 方法重载:就是在同一个类中方法的名字相同,单参数个数、参数的类型或返回值类型不同。
方法重写:子类和父类的关系,子类重写了父类的方法,但方法名、参数类型、参数个数必须相同。
5 . 非嵌套类(nonnested)不能被声明为protected。
6 . 在一个实现接口的类中,所有实现的接口中的方法都必须是public类型的。
7 . 父类类型的(对象)引用变量能引用子类类型的对象,反之则不行。
8 . 对于非字符类的引用类型的变量,互相赋值后引用的是同一个(实体)对象,而对于字符类引用类型的变量,则互相赋值后引用的却不是同一个(实体)对象。
9 . “>”、“>=”、“<”、“<=”同样能应用与字符(character)类型的数值比较。
10 . 如果一个对象的任一父类实现了某个接口(interface),则该对象instance of这个接口时其结果都将是true。
11 . 可比较的数据类型只有:数值型、布尔型、字符型和对象引用变量(类型)。
12 . If判断语句中的判断条件只能是布尔型,但唯一一个可以列外的情况就是布尔变量的赋值语句可以出现在判断条件中如:booleanb;if (b=true){}是合法的,然而if(x=0)
却是不合法的。
13 . 无论是整数除以0求余(%)还是浮点数除以0求余(%)编译时都不会报错,但是注意:浮点数除以0求余(%)运行时也不会出错(输出结果为无穷大);整数除以0求余(%)则运行时会报错,若是整数直接除以0(/0)则编译时间就不会通过。
14 . 整数(数字)和字符串相加(+)得到的仍是字符串,整数和整数相加得到的仍是整数。
15 . final变量不能被“++”或“--”修饰。
16 . 移位操作符只能用在整型数值上,浮点型数值不能被执行移位操作。无符号右移操作符
“>>>”得到的结果永远是正值。
17 . 当用cast去格式化一个输出值的时候,即使被格式化的数字大于了变量的容量范围,系统编译和运行都不会出错;如byte bTest= (byte)130,运行和编译都不会出错。
18 . 逻辑或(||)和逻辑与(&&)两边的表达式都必须是布尔型(boolean)。
19 . 位或(|)和位与(&)两边的表达式则可以是布尔型(boolean)或整型数值;备注:位与(&)的优先级大于和位或(|)的优先级;
20 . 浮点型(float-point)类型的(32位)数值值默认是double类型(64位)的。
21 . Instanceof操作符只能应用于对象类型(操作)。
22 . If语句中的判断条件必须是boolean类型的,不能使用等号(=),但是对于boolean类型的变量有一种情况可以例外,例如if(boolVariable = true){};同理,switch语句中的判断对象只能是整型的(int,当然也包括会自动转换成int的char、byte、shortint)变量;特别注意:case语句中参数要求同switch语句,另外再加一条,参数中若是变量,则该变量必须是final类型的!!不能两个case语句用同一个标签;如下的例子也是错误的:switch(byteVariable){case129:}129超过了byte界限。
23 . 注意:do{} while(判断条件);最后的分号一定不能少!!
24 . continue语句必须在一个loop(循环)语句中,否则会编译出错;然而break语句则可以同时出现在loop(循环)语句和switch语句中。
25 . catch语句必须紧跟在try语句之后;catch语句之间不能存在任何其他语句;try…catch
语句中可以不存在catch语句但是若没有catch语句则必须存在finally语句。
26 . 类“Exception”继承类“Throwable”;Errors不是Exception,因为他不是继承Exception得来的。
27 . 切记:在catch语句中子类异常一定要写在父类异常之前,否则编译不通过。
28 . 因为Error不是Exception的子集,所以在要扔出Error的方法中不需要声明该Error。
29 . 自定义的异常(继承Exception异常类)都是checked异常,意思是他在被扔出之前必须先被定义。
30 . Assertion语句的第一个表达式(Expression)的值必须是布尔型(boolean);整个Assertion语句的值必须是true,否则就会得到AssertionError。
31 . 注意:不要在public方法中使用assertion语句校验参数输入(的正确性);但是在private方法中使用是合法(正确)的;不要用assertion去校验命令行参数;不要在产生边界效应的地方使用assertion。
32 . “loop”不是JAVA关键字!!强烈提醒:“continue”只能用在loop(循环)结构中。
33 . 如果一个方法没有处理它在try语句中声明的异常,那么在该(被扔出的异常)异常被传播到调用该方法的方法那里之前会先执行finally语句。
34 . 在assertion语句中,“:”后面的表达式必须是有返回值的(方法调用)。
35 . 方法可以被重载和重叠,但是:构造函数只能被重载。
36 . 子类中重叠(override)父类的方法时应满足如下几点要求:
(1.)参数列表要完全匹配;(2.)返回类型要完全匹配;
(3.)访问修饰符的限制程度一定要等于或低于父类(方法)访问修饰符的限制;
(4.)子类(方法)中不能抛出新的或比父类(方法)更宽的检测异常;
(5.)final类型的方法不能被重叠(override);
(6.)不能被继承的方法(如private方法)是不能被重叠(override)的。
37 . 子类中重载(overload)父类的方法时应满足如下几点要求:
(1.)参数列表必须要改变;(2.)返回类型可以改变;
(3.)访问修饰符可以改变;
(4.)子类(方法)中可以抛出新的或比父类(方法)更宽的检测异常;
(5.)可以载同一个类之内或其子类中重载方法;
38 . 构造函数可以使用任何访问修饰符(private、protected、public)。
39 . 接口(interface)没有构造函数,抽象类有构造函数;构造函数不能被继承也不能被重载。
40 . 如果一个类中存在public的实例变量,则称该类是不符合封装规范的。
41 . JAVA中任何对象都拥有toString方法。
42 . StringBuffer对象和String对象的不同之处就是StringBuffer对象的内容可以直接修改(主要用于大批量的数据输入输出);如:StringBuffersb = new StringBuffer("abc")。
43 . Math类的构造函数是private的,并且标记为final,故不存在Math类的实例对象。
44 . 浮点数可以整除0,但是整型数却不可以整除0。
45 . 包装类(WrapperClass)对象(值)是不可变的,一旦他们被赋予了一个值这个值将是不可改变的。
46 . 每个包装类(除了Chapter只有一个构造函数)都带两个构造函数,一个以原始类型作参数,一个以字符串类型作参数。
47 . 有三种类型可以比较其值是否相等:原始类型(primitivetype)、引用类型(referencetype)和对象(Object);==用在两个原始类型变量之间是比较这两个原始类型的值是否相等;而用在两个引用类型之间则是比较这两个变量是否是引用同一个实例对象。
例如:String x1= "abc";String x2 ="abc";则x1==x2返回真值(因为两个字符串变量在栈中实际是一个字符串(地址));而String x1 ="abc";String x2 = "ab";
X2 = x2 +“c”;则x1==x2返回假值;x1.equals(x2)返回真值。
48 . StringBuffer类没有重叠方法equals;String类和Wrapper(包装)类都是final类并重叠了方法equals。
49 . String类有一个length方法,数组(array)有一个length属性。
50 . String类没有append方法,因为它本身(一旦赋值)就不能改变。
51 . 三角函数(sin、cos等)需要输入的参数是弧度值(radian)不是角度值(degree)。
52 . Valueof()方法返回的是一个整型对象,而parseInt()方法需要的输入的是字符串参数而不是整型值作参数。
53 . 不同类型的引用变量(如父类和子类变量),当(合法)引用同一个对象时(如两个变量同时引用同一个子类对象),他们是相等的(==和equal方法的值都是true)。
浙公网安备 33010602011771号