以下是自己学习java语言时,记录的要点
1.java类的域与局部变量不同点:如果没有在构造器中显示地给域赋予初值,那么域就会被自动赋予默认值,数值为0,布尔值为false,对象为null。而局部变量则不会。
2.编写一个类,如果没有写构造器(没有提供任何构造器),系统默认会提供一个无参构造器,构造器将所有实例域设为默认值。
3.关键字this(....)可以用来调用同一个类的其它构造器
5.调用构造器的具体处理步骤:
1)所有数据域被初始化为默认值(0,false,null)
2)按照在类中出现的次序,依次执行所有域初始化语句和初始化块
3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
4)执行这个构造器的主体
6.一个类可以使用所属包中的所有类,以及其他包中的公有类。
7.如果没有指定public或private,这个部分(类,方法或变量)可以被同一个包的所有方法访问
8.方法可以访问所属类的私有域
9.子类不能直接访问超类的私有域及私有方法,可以通过super实现对超类方法调用。
10.子类构造器若使用super调用父类构造器,super调用的语句必须是子类构造器的第一条语句。
11.this和super都可以用来调用构造器。
12.super视为调用父类方法的一个特殊关键字。
13.子类方法可以定义与父类方法签名相同(签名相同指方法参数列表相同,方法名字也相同)的方法,此时子类方法会覆盖超类的方法,返回类型可以不同,并允许子类覆盖方法的返回类型定义为原方法返回类型的子类型。
并且,在覆盖父类方法时,如果父类方法时public,子类方法也一定是public(子类方法可见性不低于父类方法)
14。如果是private方法,static方法,final方法或者构造器,编译器可以准确地知道调用哪个方法,这种调用方法称为静态绑定。
15.有final关键字定义的类,目的是阻止继承。一个类的特定方法也可声明为final,那么子类就不能override此方法,特别地,final类中的所有方法默认都是final方法(因为类都已经不允许继承),但不包括域(域被声明为final,构造对象之后就不允许改变他们的值了)。
final声明的类不涉及动态绑定。
16.类的类型转换:只能在继承层次内进行类型转换,将超类转换成子类之前,应该使用instanceof进行检查。
17.abstract声明的方法不需要方法的实现,包含一个或多个抽象方法的类本身需要声明为抽象类(抽象类也可以不含任何抽象方法),在一个抽象类中可以包含具体数据和具体方法。
抽象类不能被实例化,但可以定义一个抽象类的对象变量来指向非抽象子类的对象。
子类继承抽象类,可以选择全部实现父类的抽象方法或者实现部分(但需要全部定义,此时子类也必须声明为抽象类)
18.
19.只要对象与字符串通过+连接,会自动调用对象的toString();
20.Integer对象的静态方法pareseInt()返回值为int,此方法与Integer类没有什么关系,只是将该方法放置在包装器中。
21.下面这段程序是否可以对x的值进行更改,请思考(设计java的传递机制,对象的装箱和拆箱)
public static void triple(Integer x){
x = 3 * x;
}
22.获取Class类对象可以有三种方法:
- 直接T.class,T是任意的Java类型,包括基本类型int等(int.class是一个Class类的对象)。所以说一个Class对象表示的类型未必是一种类。
- E.getClass(),E是java对象
- Class c1 = Class.forName("java.util.Date")
String s = "java.util.Date";
Object m = Class.forName(s).getInstance;//创建了一个Date对象
24.Class类中的getFields(), getMethods(), getConstructor(),返回类提供的public域,方法和构造器数组,其中包括超类的共有成员。
而getDeclaredFields()等方法将返回类中声明的全部域,方法和构造器数组,其中包括private,protected,但不包括超类成员。
25.关于接口:
- 可以声明一个接口变量,但此变量必须引用实现了接口的类对象。
- 接口也可以被继承。
- 接口中不能包含实例域或静态方法,但可以包含常量。
- 尽管每个类智能拥有一个超类,但可以实现多个接口。(用逗号,将实现的各个接口分隔开)