1、java类的四大特征
封装、抽象、继承、多态
2、类与类之间的关系
依赖(“use-a”);聚合(“has-a”);继承(“is -a”)
3、对象与对象变量
要想使用对象就要构造对象,并指定初始状态,在java 中用构造器来构造新实例。
构造器
(1)构造器的名字应该与类同名;
(2)构造器可以有0,1或多个参数;
(3)构造器没有返回值;
(4)构造器伴随new操作一起调用
例子:Date 类的构造器名为Date,构造一个新的Date对象, new Date();
4、java类库中的LocalDate类
LocalDate aa=LocalDate.now();//构造当前的日期
LocalDate bb=LocalDate.of(1999,12,31);//提供年月日将构造的对象保存到对象变量中
int year =bb.getYear();//1999
int month =bb.getMonthValue();//12
int day =bb.getDayOfMonth();//31
5、更改器和访问器
public void setAge(int x){
age = x;
}
public int getAge(){
return age;
}
6、安全
计算机中的安全,通常指的是多线程下的并发安全
访问器和更改器要保证多线程下的并发执行,需要代码的配合
例子同下:
7、线程
Thread t1 =new Thread(){
public void run(){
System.out.println("111");
}
};
Thread t2 =new Thread(){
public void run(){
System.out.println("222");
}
};
t1.start();//start()不是立即执行的,而是将线程,转为就绪态,等待被选中
t2.start();
虽然线程都是在main线程中创建的,但是当创建完成后,就各自执行各自的,没有先后顺序。
多线程并发执行的时候,可能会在任何一步切换线程,这就导致了,线程并发执行过程中的不安全。
例子:
解决线程并发执行过程中安全性的问题:
在A类中重新设置一个数组,在线程t1和t2中都调用这个重新设置数组,相当于构建了两个不同的数组,这两个数组的指向的地址是不变的,但当其中一个数组修改自己的指向地址时,并不会对另外一个数组的指向地址和公共区域的指向地址产生影响,这样设计的多线程并发执行,就达到了绝对安全。
8、重载
pubic Person(){System.out.println("");}
pubic Person(int x){System.out.println("");}
pubic Person(int x,String b){System.out.println();}
重载就是具有相同的方法名,但是参数不同
9、final在修饰引用类型的时候,只能保证整体不会发生变化,以数组为例,虽然被final修饰的数组不能整体发生修改,但是可以通过修改数组中某个位置的元素。所以final大多数情况下修饰基本类域或不可变类域。final表示存储在一个变量中的对象,不会再指向其他对象。
10、静态域和静态方法
private static int ww=1;//静态域
public static void Person(){}//静态方法
一个静态的常量在其他的了类中可以直接调用;但是一个非静态的常量需要,在其他的类中new一个此类,才可以调用这个非静态常量
static定义一个静态,本质上是给这个静态的类、方法、常量分配一个空间,而非静态的,其实只是理论上存在的,并不是在计算机上已经存储的。
11、传递有两种方式,一种是引用传递一种是值传递,在java中支持的是值传递
12、无参数构造器
public Employee(){
}
13、默认域初始化
数值默认0;布尔类型默认FALSE;引用类型默认null。
在方法中声明的变量是没有默认值的,在类中声明的变量才有默认值,初始化方法中的局部变量必须声明,初始化类中的域会自动默认初始值。
14、显示域初始化
人为赋给域(常量)值得方式,叫做显示初始化
15、调用另一个构造器
在一个类中,如果想在一个构造器中使用另外一个构造器,需要使用this关键字,
public Person(){
this(Employee(int x));//在person构造器中使用Employee构造器
}
同时需要注意的是,在使用this的时候,需要吧this放在构造器的第一行。
16、析构器
因为java中存在垃圾回收器,所以我么不需要在,java中构造析构器,但是在c++中我们需要构造
但是有时候,某些对象使用了内存之外的其他资源,例如文件或使用了系统资源的另一个队象的句柄,在这种情况下,资源不在使用的时候回收就很重要。因此在任何一个类中添加finalize,finalize方法会在垃圾回收器清楚对象前调用。