《java核心技术》
花了半天到一天又认真读了一下java核心技术中的类部分,感觉最近编程时候好多迷迷糊糊,“这样对不对呢,试一试。怎么不对呢”这类的迷糊问题原来都早有定义。
-
main函数必须在主类中
-
一个class就是一个机器,要使用其中的方法,需要构建这个类的实例。 一个class中如果定义构造器,构造器的类型是public 类名,类名就是原类名
-
一个类可以有多个构造器,构造器没有返回值。
-
变量标记为private,代表只有该类的方法才能使用这些变量,别的类的不可以 方法标记为public,则别的类的方法都可以调用这个方法
-
访问器方法:getname 更改器方法:setname 一般是:私有的数据域,共有的访问器方法和更改器方法 、
-
静态方法:private static的方法,不需要构建实例就可以直接饮用
a,如果该方法不需要用对象的变量,只需要使用显式参数就可以
b,如果这个方法只需要访问类的静态域。
- 静态域:属于类的一个变量,private static int nextId,当将类做实例化后,会有多个对象,但是只有一个静态域。
- 一个类中只能含有一个公有类,且名字和文件名一致。EmployTest.java中含有main方法,Employ.java中定义了Employ 的class,则编译时候javac Employ*.java ,在java EmployTest,它会自动将Employ.java也生成class,再串联执
- .每个类都可以有个main,用来测试这个类,做单元测试
- this可以调用隐式参数。如果没有写构造器,会有个默认构造器,将数值设置为0,将对象设置为null(注意:String类的name也会成为null,因为String是个类)
对象与类基础
对象变量:Java的对象变量相当于C++的对象指针
构造体:1. 必须与类同名
2.每个类至少有一个构造体,默认为无参构造体
3.可以有0个或多个参数
4.没有返回值
5.可以是private,protected或public,默认为public
6.总是伴随new关键字一同被使用
显式参数:类方法括号中的参数
隐式参数:调用时出现在方法名前的类对象;方法定义中使用this关键字代表该隐式参数
基于类的访问权限:某个类的方法可以访问该类的任何一个实例的私有域
final实例域:将实例域定义为final,则在创建实例时必须初始化这样的域;对于可变对象的变量,定义为final只表示该变量不能再引用别的对象,但当前对象的内部数据域仍可以修改。
静态域:将域用static关键字修饰,表示该类的每一个实例中都有这个域的一份拷贝;静态域属于类,而不属于任何独立的实例,每次对其进行修改,则每个实例中的该域都会变成最新的值
常量:static + final
静态方法:将类方法用static修饰,表示该方法不能向该类的实例实施操作;静态方法没有隐式参数(this);静态方法只能访问该类中的静态域,不能访问实例域;静态方法通过类名直接调用,如Math.random();
方法参数
Java使用值调用
方法参数有两个类型:
1. 基本数据类型
2. 对象引用
对于基本数据类型参数,方法并不能修改实参(因为值调用)
对于对象引用的参数,形参与实参指向的是同一个对象位置,所以方法能改变该对象内部的值,但不能使实参指向一个新的对象
对象构造
重载:一个方法的签名包括方法名及其参数列表,不包括返回值和访问权限;重载就是具有相同方法名、不同参数列表的一组方法,由编译器根据参数列表挑选匹配的方法进行调用
默认域初始化:如果没有在构造体中对域进行显式赋值,那么默认地,数值域赋为0,布尔域赋为false,对象变量赋为null
默认构造体:如果在类定义中没有显式定义构造体,那么默认地,运行时系统会提供一个无参的空构造体
显式域初始化:类定义中,在域定义时直接将初始值赋给该域
调用另一个构造体:在一个构造体中第一句使用this(…);可以调用另一个重载的构造体
初始化块:类定义中直接包含代码块,用于给域赋上初始值
对象构造执行顺序:包含静态块、域初始化语句、初始化块、多个构造体
1. 所有数据域都被初始化为0、false或null
2. 按照类声明中出现的次序依次执行所有静态块
3. 按照类声明中出现的次序依次执行所有域初始化语句和初始化块
4. 如果构造体第一行调用了第二个构造体,先执行第二个构造体的主体
5. 执行本构造体的主体
对象析构:Java不支持对象析构,由垃圾回收器统一回收不再被需要的资源