一. 类
1.定义
- 成员变量(属性):
- String name;//姓名
- int age;//年龄
- 成员方法(行为)
- public void eat ();//吃
- public void sleep ();睡
- 注意事项:
- 成员变量是直接定义在类当中,在方法外边
- 成员方法不要写
static
关键字 - 成员变量如果没有赋值,会有一个默认值
2.使用
-
导包:指出需要使用的类在什么位置
import 包名称.类名称
- 对于和当前类属于同一个包的情况,可省略
-
创建:
类名称 对象名称 = new 类名称()
-
使用:
- 使用成员变量:
对象名.成员变量名
- 使用成员方法:
对象名.成员方法()
- 使用成员变量:
3. 内存
- 方法区:
- 类信息:变量、方法等信息
- 方法----地址值
- 堆:
-
new
出来的东西 - 类的成员变量(带默认值)
- 类的成员方法----地址值
-
- 栈:
- 对象名称、方法的成员变量、方法的执行
- 根据地址映射到堆中----根据地址到方法区
- 方法区中的信息进栈(压栈)--- main方法最先进栈
- 语句执行完成后立刻马上出栈(先进后出)
- 当一个对象作为方法参数传递时,实际上传递的是对象的地址值
引用类型作为参数,传递的是地址值
- 当使用一个对象类型作为方法的返回值时,return返回的其实就是对象的地址值
4. 局部变量与成员变量
- 定义的位置不一样:
- 局部变量:在方法内部
- 成员变量:在方法外部,直接写在类中
- 作用域不同:
- 局部变量:只有在方法当中才能使用,出了方法不能使用
- 成员变量:在整个类中全都可以通用
- 默认值不同:
- 局部变量:没有默认值,手动赋值后才可以使用
- 成员变量:有默认值,规则同数组
- 内存的位置不一样:
- 局部变量:位于栈内存
- 成员变量:位于堆内存
- 生命周期不一样:
- 局部变量:随着方法进栈而诞生,随着方法出栈而消失
- 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
二. 封装性
面向对象三大特征:封装、继承、多态
封装性在Java中的体现:
- 方法
- 关键字
private
- 间接访问
private
成员变量,就要在类中定义一对儿Setter/Getter
方法 - 方法名称必须要叫
SetXxx、GetXxx
-
boolean
类型的getter
方法名称为isXxx
- 间接访问
public class Person {
String name;
/*
成员变量用Private修饰,则只能在本类中被使用,在其他地方不能直接访问
间接访问则必须用Set/Get方法
提高了代码安全性,有效防止不合理情况发生(年龄有限制,但int并不能有效限制住)
*/
private int age;
public void printPersion() {
System.out.println("my name is:" + name + " i am:" + age);
}
//set方法没有返回值,必须带参数
public void setAge(int num) {
if (age < 100 && age >= 0) {
age = num;
} else {
System.out.println("数据不合理");
}
}
//get方法没有参数,必须有返回值
public int getAge() {
return age;
}
}
public class Demo04Person {
public static void main(String[] args) {
Person person=new Person();
person.name="arnold";
//person.age=20;错误写法,不能直接访问
person.setAge(20);
person.printPersion();
}
}
三. this关键字
封装的优化1----this关键字
- 场景:当方法的局部变量和类的成员变量重名时,根据“就近原则”,优先使用局部变量
- 解决重名分不开的情况:
this.成员变量名
- 通过谁(对象)调用的方法,谁就是
this
四. 构造方法
封装的优化2----构造方法
- 构造方法是专门用来创建对象的方法,当我们通过
new
关键字来创建对象时,其实就是在调用构造方法 - 格式:
public 类名称(参数类型 参数名称){
方法体
}
- 注意事项:
- 构造方法名称必须和类名称完全相同
- 不要写返回类型,
void
都不要写 - 没有返回值,不能
return
具体值
public class Student {
//构造方法
public Student() {
System.out.println("无参构造方法执行啦");
}
public Student(){
}
}
public class Demo05Student {
public static void main(String[] args) {
Student s = new Student();//调用构造方法
}
}
- 如果没有编写任何构造方法,编译器会“免费赠送”一个构造方法
- 一旦编写了至少一个构造方法,编译器的默认构造方法将不起作用
- 构造方法也是可以重载的(Overload)
五. 标准类
一个标准类(也叫Java bean
)由四个部分组成:
- 所有成员变量都要使用
private
关键字修饰 - 为每一个成员变量编写一对儿
Getter/Setter
方法 - 编写一个无参的构造方法
- 编写一个全参的构造方法
IDEA中自动生成:
- 快捷键:
Alt+Insert