面向对象
对象的创建及使用内存图
方法区用于加载类信息,堆里面用于存放new出来的,栈中存放局部变量
运行TestDemo2时首先加载TestDemo2类信息在加载Car类的信息,Car类new出来的对象存放在堆内存中,并对Car类中的成员变量附上默认值,new出来的对象有一个地址值0x123.在栈中声明Car然后找到0x123找到new的对象,并给成员变量附上默认值,再从0xabc找到Car的成员方法,将成员方法加载到栈中执行,执行完毕后销毁(出栈)。在执行并出栈完两个成员方法后main方法执行完毕然后销毁。
成员变量和局部变量的区别
-
初始化值不同:
-
成员变量有默认值
-
局部变量没有默认值,不赋值不能使用
-
-
在类中的位置不同
-
成员变量:在类中方法外
-
局部变量:在方法中或者方法的声明上
-
-
内存位置不同:
-
成员变量:在堆内存
-
局部变量:栈内存
-
-
生命周期不同:
-
成员变量:随着对象的创建而出现,随着对象的消失而消失。
-
局部变量:随着方法调用,在定义的那一行出现,随着方法的调用完毕而消失。
-
构造方法给对象的数据进行初始化。
this
this是一个关键字,表示调用的对象。哪个对象调用就是哪个对象。(相当于对象)
this的用法
-
this.成员变量
-
this(参数):调用当前类的构造方法,需要在方法当中的第一行
public Person(){ // this() 在构造方法中必须在有效代码的第一行 this("陶喆",46);// 调用本类的构造方法 System.out.println("无参构造被调用了"); } public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name, int age, String address) { this(name,age); this.address = address; }
this.成员方法()
构造代码块
构造代码块:在创建对象的时候,无论调用哪个构造方法都会先于构造方法执行
位置:类中方法外的{}
权限修饰符
决定方法或者变量使用的位置
public > protected > (default)(啥也不写) > private
同一个包同一个类 Yes Yes Yes Yes
同一个包不同类 Yes Yes Yes No
不同包同一个类 Yes Yes No No
不同包不同类 Yes No No No
super
用法
-
super(参数) 调用父类对应的构造方法 默认构造方法中都有一个super(),需要在方法当中的第一行
-
super.成员变量 获取父类的成员变量
-
super.成员方法() 调用父类对象的成员方法
重写和重载
Override在父子类中存在方法签名相同的人非静态方法,就称之为重写。也称之为方法的覆盖。
子类重写的方法的权限修饰符的范围要大于等于父类对应方法的权限修饰符的范围
Overload方法名一样不一样的是形参个数和形参的参数类型
多态
多态的体现形式:
-
编译时多态: 方法的重载
-
运行时多态:方法的重写、向上转型
向上转型格式:父类 对象名 = new 子类();
// 向上转型 就是用父类来声明对象,用子类来创建对象 // 在编译期间只会检查声明类和创建类之间是否有继承关系 // 到运行期间才能真正确定具体的子类对象 // 编译看左边,运行看右边 // 创建的对象只能用父类当中可用的方法和变量
static是关键字,也是修饰符。可以修饰变量,方法,代码块,内部类
标签:变量,构造方法,对象,08,24.10,Yes,方法,成员 From: https://blog.csdn.net/2401_87910368/article/details/142771192