文章目录
类和对象的定义
类的定义
[访问权限修饰符] class 类名 {
[private/protected/public] 成员的声明和定义 ;
}
【注意】
- class是声明类的关键字,<类名>是标识符,通常以首字母大写开头,用来与对象名,方法和变量名区分。
- 类体可以包含成员属性和成员方法两部分,成员属性声明必须以分号结束。
- 定义一个类就相当于定义了一个类型和一个作用域。
访问权限修饰符
- private 私有对象get set方法进行访问
- protected
- public 公共的
对象的实例化
- 类只是抽象的数据类型,类对象才是具体可操作的实体。利用对象使用类提供的功能。
<类名> <对象名> = new <类名> ([参数1,参数2,…]) ;
或
<类名> <对象名>;
<对象名> = new <类名> ([参数1,参数2,…]) ;
Student mary = new Student(18,"male");
或者
Student mary;
mary = Student(18,"male");
默认值
局部变量没有初始值,和成员属性不同
成员属性都有默认值
boolean -> false
char->‘u\0000’
byte short int ->0
long ->0L
float->0.0f
double->0.0
引用类型->null
类成员的访问
访问属性的一般形式:
<对象名>.<属性名>;
访问方法的一般形式:
<对象名>.<方法名>([<参数1>,<参数2>,…]);
private 私有化的成员只能通过公共的set方法和get方法传参。
特殊的访问形式:POJO类
名称:PoJo 类
特点:方法与属性成对出现,私有的属性公有的set和get方法。
作用:承载数据
public class Hanshu {
private String brand;
private int prince;//成员属性
//成员方法((局部)变量在方法中定义)
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setPrince(int prince) {
this.prince = prince;
}
public int getPrince() {
return prince;
}
}
类的成员
Java中方法只能定义在类中,称为类的成员方法,基本的语法:
[方法修饰符] 方法返回值类型 方法名([<参数列表>]) {
方法体;
}
成员方法
方法修饰符
- private 私有对象get set方法进行访问
- protect
- static 静态方法->中使用静态方法;或者实例化想使用的方法的类成为一个对象
- final 常量或者方法不可重写的方法,类不可继承
- abstract 提前声明的方法->表示抽象的方法,不具体。
- synchronize 多线程,同步调用
方法传参
值传递
当参数为基本数据类型,不改变值
地址传递
当参数为引用类型 : 类、接口、数组、枚举,传递的都是引用值
【总结】
- 当参数是基本数据类型时,方法不能修改实际参数的值。
- 当参数是引用类型时,方法通过地址引用改变了实际参数对象的内容
方法重载
重载条件
- 在同一个类中
- 方法名称相同
- 参数类型不同
重载优势
- 对不同参数的方法调用变得简单
- 是否是静态不作为重载依据
- 重载方法之间互相调用
- 返回值可以不同
特殊成员方法—构造方法
构造方法:将类实例化成对象时调用的方法。没有返回值,方法名和类名相同,使用new创建对象时自动调用
,而且只调用这一次。
1.假如定义了有参的构造方法,系统不会自动添加无参的构造方法。
2.假如没有定义构造方法,系统会自动为类构造一个无参的构造方法。
this关键字
- this用于引用本类中的属性和方法
- this.属性、this.方法()
- this调用本类的构造方法
- 使用this()、this(参数)的形式
- this调用构造方法,只能放在重载的构造方法中的第一行
- this还可以作为返回值,返回“当前调用方法”的那个对象的引用。
public class Count {
private int num;
public Count add(){
num++;
return this;
}
public int getNum() {
return num;
}
public static void main(String[] args) {
Count cou = new Count();
cou.add().add();
System.out.println(cou.getNum());
}
}
输出值为2.方法被调用了两次。
垃圾回收机制(面试易考)
在C程序中
- 可以手工清理或者删除缓存中的数据,通过free进行清理工作。
手工内存管理的缺电
- 如果程序中存在错误或缺陷会导致内存泄露。
- 编写彻底手工内存管理的代码是一项重要而复杂的任务,所以会使复杂的程序的开发工作量加倍。
Java垃圾收集器
-
Java的“垃圾收集器”为内存管理提供了一种自动解决方案。
-
对于程序中不再使用的内存资源,“垃圾收集器”能自动将其释放。
-
自动垃圾收集的缺点
- 不能完全控制“垃圾收集器”什么时候执行或不执行。(在Java程序中可以请求JVM运行垃圾收集器,但无法保证JVM会答应请求
)
- 不能完全控制“垃圾收集器”什么时候执行或不执行。(在Java程序中可以请求JVM运行垃圾收集器,但无法保证JVM会答应请求
-
当Java感到内存不足时会运行垃圾收集器
-
当没有引用能够访问对象时,该对象就是适合进行垃圾收集的。
** 垃圾回收情形一:空引用**
public class CatTest{
public static void main(String[] args){
Cat c1;
Cat c2;
c1 = new Cat(“小花”);//创建对象和引用
c2 = c1;
c1 = new Cat(“小白”);
c2=null;
}
}
最后因为没有引用指向“小花”所以他是没有引用可以访问的对象,可以被进行垃圾收集。
垃圾回收情形二:隔离引用
public class Island{
Island n;
public static void main(String[] args){
Island i2 = new Island();
Island i3 = new Island();
Island i4 = new Island();
i2.n=i3;
i3.n=i4;
i4.n=i2;
i2 = null;
i3 = null;
i4 = null;
}
}
i1,i2,i3三个的指针部分相互引用,但是没有引用可以访问到他们三。