Java基础语法(五)
类与对象
一、面向对象
三大特性
- 封装性:把对象成员属性和行为封装为一个整体;把不需要外界知道的信息隐藏起来,隐蔽对象的功能实现细节.
- 继承性:
被继承的类称为父类或超类,已经继承产生的类称为子类或派生类. - 多态性:
- 方法重载:见上一章Java基础语法(四)
- 对象多态:子类对象和父类对象可以进行相互的转换,而且根据其使用的子类的不同完成的功能也不同.
二、类与对象
类的基本组成
- 成员属性(field): 用于保存对象的具体特征.例如,不同的人都有姓名、性别、年龄…
- 方法(method): 用于描述功能.例如,跑步、吃饭…
类与对象的定义
使用class
关键字定义类
class 类名称 {
访问修饰符 数据类型 成员属性(变量);
...
public 返回值类型 方法名(参数类型 参数1, 参数2...) {
...
return ...;
}
}
eg
:
class Person {
String name; //成员属性:名字
int age; //成员属性:年龄
public void tell() {
System.out.println("姓名" + name + "年龄" + age);
}
}
使用new
声明并实例化对象
Person per = new Person();
分步定义
Person per = null;
per = new Person();
对象内存
Java属于引用数据类型,所有的引用数据类型在使用过程中都要通过关键字new
开辟新的内存空间.
栈内存
:保存的是对象的具体信息.
堆内存
:保存的是一块堆内存的地址
垃圾产生与回收
每一个堆内存空间可以被不同的栈内存所引用;
每一个栈内存都能只能保存一个堆内存的地址信息,即如果一块栈内存已经存在有其他堆内存的引用,当需要改变引用时就需要丢弃原有的引用实体,更换为新的引用实体;
此时就会产生垃圾空间,所有的垃圾空间将等待GC
(Garbage Collection) 不定期地进行回收释放.
注意
:开发中尽量减少无用对象的产生,避免垃圾的产生.
三、封装
用法
- private 数据类型 变量名;
- private 返回值类型 方法名(参数列表) {};
按照Java的开发标准
使用set...()
,get...()
设置值和获取值.
eg
public class TestStudent {
public static void main(String[] args) {
//声明并实例化对象.
Student stu = new Student();
stu.setAge(22);
stu.setName("chester");
System.out.println(stu.getAge());
stu.study();
}
}
public class Student {
//成员变量
private String name; //姓名
private int age; //年龄
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
//成员方法
public void study() {
System.out.println(name + "加油学习!");
}
}
四、构造方法和匿名对象
格式: 修饰符 构造方法名(参数列表) {}
要求:
1. 方法名与类名相同
2. 没有返回值
3. 没有返回值类型(连void
也不能有)
注意:
1. 若无任何构造方法,则系统会给出默认无参构造;
2. 若存在有参构造,则系统不会给出无参构造,此时注意,程序里会缺少无参构造;
3. 构造方法可以重载.
eg
无参构造
class Student3 {
private String name;
private int age;
public Student3() {}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
public class TestStudent3 {
public static void main(String[] args) {
//定义一个姓名为李四,年龄22的学生
Student3 stu3 = new Student3();
stu3.setName("张三");
stu3.setAge(44);
System.out.println(stu3.getName());
System.out.println(stu3.getAge());
}
}
带参构造
class Student3 {
private String name;
private int age;
//定义无参构造函数
public Student3(String name, int age) {
this.name = name;
this.age = age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
public class TestStudent3 {
public static void main(String[] args) {
//定义一个姓名为李四,年龄22的学生
Student3 stu3 = new Student3("张三",44);
System.out.println(stu3.getName());
System.out.println(stu3.getAge());
}
}
五、this关键字
- 当前类中的属性:
this.属性
; - 当前类中的方法;
this.方法名()
; - 描述当前对象.
六、static关键字
类中的成员有普通成员(非static
)和静态成员(static
)
更多请见多态