目录
阐述
举例说明 面向对象 思想 特点
面向对象的特点:
更符合我们思考问题的习惯。
对于使用者来说,将复杂问题简单化。
我们从执行者的位置变成了指挥者,只需要调用对象的方法即可。
举例:我想吃煎饼,可以命令大妈(对象)摊煎饼(调用方法),煎饼摊好给我(返回值),我就可以吃了。
this关键字的由来及使用
this代表所在类的对象引用。方法被哪个类调用,this就代表哪个类。
局部变量和成员变量重名的时候,就用this。
封装的概述和好处
封装是 面向对象的三大特征之一(封装、继承、多态),是面向对象编程语言对客观世界的模拟,和客观世界一样把细节(成员变量)隐藏在对象内部,只向外界暴露公共的访问方式。
好处:
通过方法来控制成员变量的操作,提高了代码的安全性。
把代码用方法进行封装,提高了代码的复用性。
private关键字的由来及使用
private可以看成封装的一种体现
private关键字是权限修饰符,修饰的是成员(成员变量、成员方法),被修饰的成员只能在本类中进行访问
使用方法:用private修饰成员,提供对应的set和get方法
成员变量和局部变量的区别
有五点不同
1.在类中的位置不同
成员变量在类中、方法外;局部变量在方法内或方法声明上(形式参数)
2.在内存中的位置不同
成员变量属于对象,在堆内存中;局部变量属于方法,在栈内存中
3.生命周期不同
成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量随着方法的调用而存在,随着方法的弹栈而消失
4.初始化值的问题
成员对象有默认值;局部对象没有默认值,必须先定义、赋值,然后才能使用
5.作用域不同
成员变量的作用域是整个类;局部变量的作用域是其所在的花括号代码块
对象的内存图原理
对象就是类事物的具体体现。
在方法区描述类的内容。
调用方法的时候,方法加载到栈内存,JVM在栈内存为方法开辟一个空间,里面存储方法中的局部变量。
如果局部变量初始化的时候new了一个对象,这个new对象的操作就是在堆内存中开辟了一个空间,存储该对象,而这个空间的地址值被赋给栈内存中的局部变量,局部变量可以通过地址值指向堆内存中对应的对象。
在堆内存中,对象的成员属性的值是其本身,成员方法的值是方法区中成员方法所在空间的地址值。
方法调用完后,会从栈内存中弹出,里面的局部变量也跟着消失。而其new出来的对象在堆内存中,要等到垃圾回收器空闲的时候被回收。
Java中的类和现实中事物的对应关系
事物相当于类
事物的属性相当于类的成员变量
事物的行为相当于类的成员方法
课后作业
实现从控制台接收一个学员信息,并存储到一个对象中。
打印这个对象的所有属性值。
//设计,并定义一个学员类:Student,要求有以下属性:
// 学员编号(String)
// 姓名(String)
// 性别(String)
// 身高(double)
// 年龄(int)
//使用封装的原则,并提供无参和全参的构造方法。
public class Student {
private String id;
private String name;
private String sex;
private double height;
private int age;
public Student() {}
public Student(String id, String name, String sex, double height, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.height = height;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import java.util.Scanner;
//定义MainApp类,并包含main()方法。
//程序启动后,应分别提示用户输入学员编号、姓名等信息。
//例如控制台显示:
// C:\>请输入学员编号:
// C:\>....
// C:\>请输入学员姓名:
// C:\>....
// .................
//数据接收到程序中,并定义局部变量存储;
//创建Student对象,通过构造方法将所有数据存储到Student对象中;
//打印对象中的每个属性值。
public class MainApp {
public static void main(String[] args) {
Student student1 = new Student();
System.out.println(student1.getAge()); //输出0
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学员编号:");
String id = scanner.next();
System.out.println("请输入学员姓名:");
String name = scanner.next();
System.out.println("请输入学员性别:");
String sex = scanner.next();
System.out.println("请输入学员身高:");
double height = scanner.nextDouble();
System.out.println("请输入学员年龄:");
int age = scanner.nextInt();
Student student = new Student(id, name, sex, height, age);
System.out.println("学员编号:" + student.getId());
System.out.println("学员姓名:" + student.getName());
System.out.println("学员性别:" + student.getSex());
System.out.println("学员身高:" + student.getHeight());
System.out.println("学员年龄:" + student.getAge());
}
}