day12
一、初识面相对象深入理解
需求:
创建人类的对象,并操作对象
分析:
人类 - Person
属性:name、sex、age
方法:eat、sleep
场景:创建多个对象,去操作对象
public class Person {
//成员变量
String name;
char sex;
int age;
//成员方法
public void eat(){
System.out.println(this.name + "吃饭饭");
}
//成员方法
public void sleep(){
System.out.println(this.name + "睡觉觉");
}
//静态方法
public static void method(){
System.out.println("静态方法");
}
}
//测试类:该类中有main方法,测试我们写好的代码
public class Test01 {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.name = "奇男子";//一个一个赋值
p1.sex = '男';
p1.age = 22;
p2.name = "星宫一花";
p2.sex = '女';
p2.age = 24;
p1.eat();
p1.sleep();
p2.eat();
p2.sleep();
Person.method();
}
}
面向对象深入理解图
面向对象内存图
小结1.class文件只加载一次
2.class文件中包含了该类所有的信息
3.new对象会在堆中开辟空间,存放成员变量
4.成员变量系统会赋默认值
5.每个对象独享一份成员变量
6.方法中的this表示调用该方法的对象
7.成员方法可以使用this
8.静态方法使用类名调用,所以方法内不能使用this
二、构造方法
前言 - 创建对象的语法:类型 引用 = new 构造方法;
分类:
无参构造和有参构造
含义:
与类名相同,且没有返回项的方法
作用:
1.和new关键字在一起表示创建对象
2.初始化数据
注意:
1.创建对象的过程Person p = new Person();,也叫做实例化
2.当类中没有有参构造时,系统会默认实现无参构造;反之不会默认实现
3.构造方法可以重载的
有参构造好处:创建对象时,把数据赋值给该对象
经验:
类中编写了有参构造,我们记得把无参构造加上
需求:创建人类,操作对象
public class Person {
//成员变量
String name;
char sex;
int age;
//构造方法 - 无参构造
public Person(){
System.out.println("无参构造");
//初始化数据
this.name = "默认值";//不写this也是默认使用用this
this.sex = '男';
this.age = 0;
}
//构造方法 - 有参构造
public Person(String name,char sex,int age){
System.out.println("有参构造");
this.name = name;//不写this会报错,将传进来的参数赋值给对象的属性
this.sex = sex;
this.age = age;
}
//成员方法
public void eat(){
System.out.println(this.name + "吃饭饭");
}
//成员方法
public void sleep(){
System.out.println(this.name + "睡觉觉");
}
}
public class Test01 {
public static void main(String[] args) {
/* //无参
Person p = new Person();
p.name = "奇男子";
p.sex = '男';
p.age = 22;*/
//类型 引用 = new 构造方法;
Person p = new Person("奇男子", '男', 22);//有参构造方法,new对象时给属性赋值
System.out.println(p.name);
System.out.println(p.sex);
System.out.println(p.age);
p.eat();
p.sleep();
}
}
无参构造:new对象时,成员变量系统会赋默认值,之后会调用无参构造(可以进行初始化数据,测试类中一个一个给属性赋值),构造方法执行完,对象创建成功;
有参构造:new对象时,成员变量系统会赋默认值,之后会调用无参构造,再调用有参构造(可以进行初始化数据,将传进来的参数赋值给对象的属性),构造方法执行完,对象创建成功;
无参构造、有参构造内存图
无参构造内存图
有参构造内存图
总结:
1.练习题 -- 编写动物园类
2.初始面向对象深入理解
class文件只加载一次
每个对象的成员变量独享一份,对象存成员变量
方法要调用时才在栈内存开辟空间
3.构造方法 -- 重要
4.this -- 哪个对象调用该方法,该方法中的this就表示该对象