1>path为系统指定了相关的程序(如javac.exe、java.exe等)所在的路径,classpath为java虚拟机指定了加载的.class
文件所在的路径。
2>main方法是应用程序的入口,在程序运行时有java虚拟机调用,除此之外与普通方法没有什么不同。main方法可以重
载,被其他方法调用,也可以由子类继承,或在子类中重新定义(隐藏父类的main方法)。
3>如果要进行精确的计算,不要使用浮点类型,浮点类型只是一种近视的储存。
4>JDK1.5以后提供了基本数据类型自动封箱和自动拆箱的功能。
5>注意:i=i++;//i的值永远不变,因为temp=i;i=i+1;i=temp;所以,i一直都没有变。
6>表示数组的长度属性是length,不要和String类的length()方法相混淆。
7>java方法的调用只有值传递,不管传递的是基本类型还是引用,都不能通过形参的值而反作用于实参。传递引用的时
候,可以间接改变对象的的内容,不改变不了形参的本身。
8>protected可以在类的内部,类所在的包中以及类所在的包外的子类中访问。
9>构造器不是方法也不是类的成员,没有返回值,子类不能继承,但子类在自己的构造器中调用父类的构造器,而父类
又会调用其父类的构造器,这是一个递归的调用,直到调用到Object的构造器为止。
10>父类的引用指向子类的对象,向上转型,引用得到的只是子类中与父类相同的属性;而只有存在父类的引用指向子
类的对象的子类,才可以执行强制向下转型,转型后得到是是子类自己本身;
11>instanceof用来判断左侧的操作数的引用类型是否为右侧操作数(类或接口)的类型。例如:A instanceof(B);//B必
须是A是的父类,或者是同一类型时才为true;
12>重载是在编译时前期绑定根据实参的"引用"的类型来判断调用哪个方法;而在多态中,方法的调用是动态绑定的,
即在运行时根据实参引用指向的"对象"的类型来调用相应的方法,从而实现多态;
13>java类初始化顺序:父类静态块 --> 然后是子类静态块 --> 父类自由块 --> 父类构造函数块 --> 子类自由块 -
-> 子类构造函数块;注意,static块只执行一次,而自由块和构造函数块是每new()一个对象执行一次;
14>==和equals的比较:
1、==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的
内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
2、==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true
15>垃圾回收机制:1、java垃圾回收机制值回收不再可用即没有任何引用指向的对象。2、垃圾回收只会回收内存资源
,即new出来在堆上的对象,而对本地方法(native)并不回收。
16>方法的重载,名相同,参数列表不同;重载的选择顺序:形参和实参列表类型完全相同 --> 参数类型兼容的方法
(int和Interger等) --> 可变类型(int变folat等);
17>java中方法重写(override)的要求:
1、子类中的方法与父类中的方法的返回类型:
如果返回类型是引用类型,则重写方法的返回类型可以声明为超类方法声明的返回类型的子类型;如果返回类型是基本
类型,则重写方法的返回类型必须和超类方法的返回类型相同。
2、子类中的方法与父类中的方法有相同的方法名称
3、子类中的方法与父类中的方法有相同的参数列表
4、子类中的方法的访问级别不能低于父类中该方法的访问级别(举例:
父类方法的级别是protected,那么子类重写该方法,其级别必须是protected或者public,一定和父类的访问级别
相同或者更宽,否则编译无法通过) (public>protected>default>private)
5、子类中方法抛出的异常范围不能大于父类中方法抛出的异常的范围,(子类可以不抛出异常也满足该原则,即是说父
类抛出异常,子类不抛出异常,编译通过没问题。)
18>重写和隐藏基本相同,不同是:方法的隐藏是父类和子类方法都是static类型,成员变量的隐藏侧是子类声明了与
父类相同的成员变量;重写实现多态,调用哪个类的成员,重写和隐藏是不同的,对于重写来说,是由运行时的真正对
象决定的,对于隐藏来说,是由引用的类型决定的。
19>泛型的检测只是在编译期,所有在参数类型的信息都是在编译期间处理,在运行期间这些类型的已经消失,所以用
不用泛型最后得到的.class文件一样的。
20>泛型的几个知识点:
a、泛型的参数不能够当作父类与子类那样使用,List<Super>只能接受List<Super>类型的参数,而不能接受List<Sub>
类型的参数.
b、使其能够接受任何类型的参数类型,就可以使用类型通配符'?'来实现。
c、使用List<?extends Number>list可以接受参数为Number和Number的子类型;使用List<?super Number>list可以接
受参数为Number和Number的父类型;
21>System类是一个final类,不能被继承,构造器为private,不能实例化,不过他又一下静态的成员变量,如下:
1、public static long nanoTime();//返回最准确的可用系统计时器的当前值,以毫微秒为单位。
2、public static void gc();//运行垃圾回收器。
3、public static void exit(int status);//终止当前正在运行的 Java 虚拟机。
4、public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);//从指定src源
数组中复制一个数组,复制从指定的位置srcPos开始,到目标数组dest的指定位置drstPos结束。元素个数为length个
22>Arrays类常用对数组的操作方法:
1、排序sort():
a、对整形的排序public static void sort(int[] a);//按升序排列
b、对浮点型的排序注意NaN与任何值比较的结果是false;
c、对引用类型的排序要实现Comparable的public int compareTo(T o)方法;//小于返回负值,等于返回0大
于返回正值;
2、查找binarySearch方法、equals方法;
23>Object类的方法:
1、获取对象getClass()//一般的类类名.getClass();对于基本数据的包装类侧用:类名.TYPE获取对象;
2、equals方法:因为string中重写了equals方法,其equals方法比较的是对象的内容(即字符串的内容)而非地址;但
是在没有重写Object中equals方法的类,equals比较的是对象的地址,默认equals与==是一样的,判断是否为同一对象
即同一地址;请看:
public boolean equals(Object obj){
return(this==obj);
}
所以默认情况,默认equals与==是一样的,但equals方法被重写为比较其他,或内容等;
注意:equals相等侧hashCode相等,但hashCode相等equals不一定相等;
24>String类是不可改变的,对象一旦创建就不可以改变。多个相同的string常量,在常量池中实际是只有一份;
例子:
public class TestString {
public static void main(String args[]) {
String s = "Hello";
s = "Java";
String s1 = "Java";
String s2 = new String("Java");
System.out.println(s);
System.out.println(s == s1);
System.out.println(s == s2);
}
}
/*output:
*Java
*true
*false
*/
文件所在的路径。
2>main方法是应用程序的入口,在程序运行时有java虚拟机调用,除此之外与普通方法没有什么不同。main方法可以重
载,被其他方法调用,也可以由子类继承,或在子类中重新定义(隐藏父类的main方法)。
3>如果要进行精确的计算,不要使用浮点类型,浮点类型只是一种近视的储存。
4>JDK1.5以后提供了基本数据类型自动封箱和自动拆箱的功能。
5>注意:i=i++;//i的值永远不变,因为temp=i;i=i+1;i=temp;所以,i一直都没有变。
6>表示数组的长度属性是length,不要和String类的length()方法相混淆。
7>java方法的调用只有值传递,不管传递的是基本类型还是引用,都不能通过形参的值而反作用于实参。传递引用的时
候,可以间接改变对象的的内容,不改变不了形参的本身。
8>protected可以在类的内部,类所在的包中以及类所在的包外的子类中访问。
9>构造器不是方法也不是类的成员,没有返回值,子类不能继承,但子类在自己的构造器中调用父类的构造器,而父类
又会调用其父类的构造器,这是一个递归的调用,直到调用到Object的构造器为止。
10>父类的引用指向子类的对象,向上转型,引用得到的只是子类中与父类相同的属性;而只有存在父类的引用指向子
类的对象的子类,才可以执行强制向下转型,转型后得到是是子类自己本身;
11>instanceof用来判断左侧的操作数的引用类型是否为右侧操作数(类或接口)的类型。例如:A instanceof(B);//B必
须是A是的父类,或者是同一类型时才为true;
12>重载是在编译时前期绑定根据实参的"引用"的类型来判断调用哪个方法;而在多态中,方法的调用是动态绑定的,
即在运行时根据实参引用指向的"对象"的类型来调用相应的方法,从而实现多态;
13>java类初始化顺序:父类静态块 --> 然后是子类静态块 --> 父类自由块 --> 父类构造函数块 --> 子类自由块 -
-> 子类构造函数块;注意,static块只执行一次,而自由块和构造函数块是每new()一个对象执行一次;
14>==和equals的比较:
1、==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的
内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
2、==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true
15>垃圾回收机制:1、java垃圾回收机制值回收不再可用即没有任何引用指向的对象。2、垃圾回收只会回收内存资源
,即new出来在堆上的对象,而对本地方法(native)并不回收。
16>方法的重载,名相同,参数列表不同;重载的选择顺序:形参和实参列表类型完全相同 --> 参数类型兼容的方法
(int和Interger等) --> 可变类型(int变folat等);
17>java中方法重写(override)的要求:
1、子类中的方法与父类中的方法的返回类型:
如果返回类型是引用类型,则重写方法的返回类型可以声明为超类方法声明的返回类型的子类型;如果返回类型是基本
类型,则重写方法的返回类型必须和超类方法的返回类型相同。
2、子类中的方法与父类中的方法有相同的方法名称
3、子类中的方法与父类中的方法有相同的参数列表
4、子类中的方法的访问级别不能低于父类中该方法的访问级别(举例:
父类方法的级别是protected,那么子类重写该方法,其级别必须是protected或者public,一定和父类的访问级别
相同或者更宽,否则编译无法通过) (public>protected>default>private)
5、子类中方法抛出的异常范围不能大于父类中方法抛出的异常的范围,(子类可以不抛出异常也满足该原则,即是说父
类抛出异常,子类不抛出异常,编译通过没问题。)
18>重写和隐藏基本相同,不同是:方法的隐藏是父类和子类方法都是static类型,成员变量的隐藏侧是子类声明了与
父类相同的成员变量;重写实现多态,调用哪个类的成员,重写和隐藏是不同的,对于重写来说,是由运行时的真正对
象决定的,对于隐藏来说,是由引用的类型决定的。
19>泛型的检测只是在编译期,所有在参数类型的信息都是在编译期间处理,在运行期间这些类型的已经消失,所以用
不用泛型最后得到的.class文件一样的。
20>泛型的几个知识点:
a、泛型的参数不能够当作父类与子类那样使用,List<Super>只能接受List<Super>类型的参数,而不能接受List<Sub>
类型的参数.
b、使其能够接受任何类型的参数类型,就可以使用类型通配符'?'来实现。
c、使用List<?extends Number>list可以接受参数为Number和Number的子类型;使用List<?super Number>list可以接
受参数为Number和Number的父类型;
21>System类是一个final类,不能被继承,构造器为private,不能实例化,不过他又一下静态的成员变量,如下:
1、public static long nanoTime();//返回最准确的可用系统计时器的当前值,以毫微秒为单位。
2、public static void gc();//运行垃圾回收器。
3、public static void exit(int status);//终止当前正在运行的 Java 虚拟机。
4、public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);//从指定src源
数组中复制一个数组,复制从指定的位置srcPos开始,到目标数组dest的指定位置drstPos结束。元素个数为length个
22>Arrays类常用对数组的操作方法:
1、排序sort():
a、对整形的排序public static void sort(int[] a);//按升序排列
b、对浮点型的排序注意NaN与任何值比较的结果是false;
c、对引用类型的排序要实现Comparable的public int compareTo(T o)方法;//小于返回负值,等于返回0大
于返回正值;
2、查找binarySearch方法、equals方法;
23>Object类的方法:
1、获取对象getClass()//一般的类类名.getClass();对于基本数据的包装类侧用:类名.TYPE获取对象;
2、equals方法:因为string中重写了equals方法,其equals方法比较的是对象的内容(即字符串的内容)而非地址;但
是在没有重写Object中equals方法的类,equals比较的是对象的地址,默认equals与==是一样的,判断是否为同一对象
即同一地址;请看:
public boolean equals(Object obj){
return(this==obj);
}
所以默认情况,默认equals与==是一样的,但equals方法被重写为比较其他,或内容等;
注意:equals相等侧hashCode相等,但hashCode相等equals不一定相等;
24>String类是不可改变的,对象一旦创建就不可以改变。多个相同的string常量,在常量池中实际是只有一份;
例子:
public class TestString {
public static void main(String args[]) {
String s = "Hello";
s = "Java";
String s1 = "Java";
String s2 = new String("Java");
System.out.println(s);
System.out.println(s == s1);
System.out.println(s == s2);
}
}
/*output:
*Java
*true
*false
*/