面向对象基础
(1)对象是什么
(2)对象在计算机中的执行原理
- 每次new Student(),就是在堆内存中开辟一块内存区域代表一个对象
- 新对象s1变量里面记住的是新对象的堆内存地址,也就是说s1是一个引用变量
注: 调用每个对象的变量 是 调用每个对象在堆内存存储的变量值
调用每个对象的方法 是 通过每个对象里存储的类的地址找到方法区的对象模板里的方法
(3)类和对象的一些注意事项
注:java存在自动垃圾回收机制,会自动清除掉垃圾对象
(4)this
this是一个变量,可以在对象的方法中,拿到当前对象
调用s1对象的方法,返回的是s1对象在堆内存的地址
- this主要用来解决:变量名称冲突的问题
public void printPass(double score){
//this.score指的是所在对象的score变量,score指这个函数的形参
if(this.score > score){
System.out.println("yes");
}
else{
System.out.println("no");
}
}
注:对象的方法里在编译之后会加一个形参this,指向的就是当前对象
(5)构造器
构造器是在创建对象时,会被自动调用的方法
构造器的名字必须和所在类的名字一致,并且不能写返回值类型
public class Student {
public Student(){
System.out.println("调用无参构造器");
}
public Student(String name){
System.out.println("调用有参构造器");
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student("小q");
}
}
//输出“调用有参构造器”
构造器常见应用场景:创建对象时,同时完成对对象成员变量(属性,即方法)的初始化赋值
public class Student {
String name;
int score;
public Student(String name,int score){
this.name = name;
this.score = score;
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student("小q",85);
}
}
(6)封装、实体JavaBean
一些对象里的对象不应该能被随意赋值,应该用private 这个关键字将它封装起来
public class Student {
private String name;
private int score;
public void setScore(int score){
if(score>=0&&score<=100){
this.score = score;
}
}
public int getScore(){
return this.score;
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student();
s.setScore(63);
System.out.println("成绩为" + s.getScore());
}
}
//输出结果为“成绩为63”
若想要赋值或访问被private封装起来的变量,可以使用set、get思想来操作,set可以给赋值添加条件
在idea里可以自动生成set、get方法,右键,找到generate,点击Getters和Setters,选中要生成的变量
//生成后的样子
public class Student {
private String name;
private int score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
在idea还可以自动生成构造器,且可选参数,右键,generate,Constructor,选中要传的形参
//生成后的样子
public class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
}
public class StudentOperator {
private Student student;
public StudentOperator(Student student) {
this.student = student;
}
public void printPass(){
if(student.GetScore()>=60){
System.out.println("成绩合格");
}else{
System.out.println("成绩不合格");
}
}
}
//具体操作
public static void main(String[] args) {
Student s = new Student();
s.setName("张三");
s.SetScore(63);
StudentOperator operator = new StudentOperator(s);
operator.printPass();
}
//输出结果“成绩合格”