匿名对象、成员变量局部变量成员变量的三者区别、封装的概念、构造方法的运用、静态代码图解、继承

一、匿名对象


1、没有对象名称的对象

2、使用场景:
A.只调用一次方法时
B.作为方法的参数或作为方法的返回值时使用,直接传入传出一个对象

3、注意点:
A.栈方法区中没有引用地址,只在堆内存中开辟内存空间,也是优先被回收的(垃圾回收器gc),节省内存空间
B.匿名对象可以给成员变量赋值,但是没有任何意义,因为没对象名拿不到值

4、语法:
A.new 类名();

package qf22020217;

/**
 * 匿名对象
 */
public class Demo01 {
    public static void main(String[] args) {
        //调用一次方法时
        System.out.println(new Person2().getAge());
        //传入方法中
        new GetPerson().getPerson2(new Person2());
    }
}
class Person2{
    public int age;
    public String name;

    public int getAge(){
        return age;
    }
    public String getName(){
        return name;
    }
}
class GetPerson{
    public void getPerson2(Person2 temp){
        System.out.println(temp.getName());
    }
}

二、成员变量与局部变量的区别


1、定义的位置不同
A.成员变量在方法外(类中),局部变量是在方法中

2、声明周期不同
A.成员变量是随着对象的加载而加载,随着对象的销毁而销毁
B.局部变量是随着方法的加载而加载,随着方法的结束而结束

3、存储的位置不同
A.成员变量是存在堆内存中,局部变量是存在栈内存中

4、是否有默认值
A.成员变量有默认值,可以直接使用
B.局部变量是没有默认值,必须先赋值,才能使用

三、封装:对属性进行封装、对工具类进行封装


1、属性封装代码

package qf22020217;

public class Demo02 {
    public static void main(String[] args) {
        Animal02 animal02 = new Animal02();
        //外部不能直接对对象属性取值赋值
        animal02.setAge(-21);
        System.out.println(animal02.getAge());  //结果为0,没有赋值成功
    }
}

class Animal02 {
    private int age;

    public void setAge(int age) {
        if (age > 0) {     //提高了数据的安全性,设置条件进行筛选
            this.age = age;
        }
    }
    
    public int getAge() {
        return age;
    }
}

2、问题
A.private进行修饰,从外部不能直接访问其属性,通过get、set方法
B.在方法中,因为局部变量优先于成员变量,所以进行赋值时,this.age = age ==> this.成员变量 = 局部变量

四、构造方法

1、名称:构造方法、构造函数、构造器

2、作用:
A.构造方法是来实例化对象的
B.构造方法在实例化对象的时候给成员变量进行赋值
C.所有实例化对象都会执行构造方法

3、分类
无参构造、有参构造

4、特点:
A.构造方法的构造名称就是类名
B.构造方法是没有返回值,可以是使用return,用来结束构造方法
C.构造方法不能自身调用,必须由jvm来进行调用

5、说明:
A.系统会默认提供一个无参构造函数,如果自己重载了一个有参构造函数,系统就会不默认提供
B.在实际开发中,一般会存在一个无参构造函数和一个有参构造函数

6、set方法与构造方法
相同点:都可以给成员变量进行赋值
不同点:构造函数只能在实例化对象的时候给成员变量赋值一次
set方法是可以给成员变量进行多次赋值

五、静态

1、静态的概念
A.关键字:static 静止
B.修饰的成员变量:类 方法 变量…

2、区别
没有静态:在多个对象具有相同属性时,内存资源浪费,且修改相同资源时麻烦
有静态修饰符:在方法区中开辟一块空间,实现所有对象共享,只需要一次修改。

3、静态变量的访问的方式:类名或者对象名.

4、注意:静态变量又称为类变量,随着类的加载而加载,静态资源时最不容被gc(垃圾回收器)回收的,建议少用.

下面分别用代码和图解表述静态变量特点和存储

package qf22020217;

public class Demo03 {
    public static void main(String[] args) {
        //第一个对象创建
        Person p1 = new Person();
        p1.name = "小明";
        Person.country = "中国";  //只需赋值一次,对象共享
        p1.print();
        //第二个对象创建
        Person p2 = new Person();
        p2.name = "小李";
        p2.print();
    }

}
class Person{
    static String country;
    String name;

    public void print(){
        System.out.println("国家:"+Person.country+"\t"+"姓名:"+this.name);
    }
}

运行结果

5、上述代码内存图解(静态变量可以类名(推荐)或对象名取值,我这里只标类名取值)
静态和非静态存储

6、静态方法访问问题:
由于静态变量随着类加载而加载的,比对象先存在。所以静态变量方法不能访问非静态的方法,也不能使用this关键字,在静态方法中也不能使用this关键字访问静态的变量

六、静态变量与成员变量的比较

1、所属不同
静态变量又称为类变量,成员变量又称为对象变量
2、存储的位置不同
静态变量存在 方法区中静态区间,成员变量是存在堆内存中
3、生命周期不同
静态变量:随着类的加载而加载,最难被回收
成员变量:随着对象的创建而加载,随着对象销毁而销毁
4、访问方式不同
静态变量:直接使用类名来进行访问
成员变量:只能使用对象名来进行访问

七、继承

1、继承的概念
A.子类可以获取到父类的资源,父类不能获取到子类的资源
B.子类也有不能获取父类的资源:
不能调用private修饰的属性的,因为private只能在本类中使用
不能继承父类中的构造方法,因为构造方法只能是自己的类名才可以,但可以调用
C. super==>表示当前对象父类对象的引用,调用的语法: super() 调用无参的构造 super(参数列表) 调用父类的有参构造

2、在继承中访问成员变量的特点:
A.如果子类变量名与父类的变量重名的时候 优先访问子类的变量
B.如果子类变量与父类的变量名不重名的时候 优先访问子类的变量 如果没有 则向上进行查找 一直查找到Object

3、Object是任何类的父类或者间接父类

4、 this和super的区别
A.构造方法:
this()只能访问自身的构造方法 super() 只能访问父类的构造方法
B.成员变量:
this.变量名 既可以访问的自身成员变量 也可以访问到父类的成员变量
super.变量名 只能访问到父类的成员变量
C.成员方法:
this.方法名() 既可以访问的自身成员方法 也可以访问到父类的成员方法
super.方法名() 只能访问到父类的成员方法

解释:
因为子类继承了父类的属性、方法,所以代表子类的对象的this即可以访问自己也可以访问父类
但构造方法由jvm调用,也不能被继承,所以只能访问各自的
因为super代表父类的引用,但父类又不能访问子类的资源,所以super只能访问父类的属性、方法

5、在继承访问构造方法的特点
1、this() 调用自身的构造方法 super()调用父类的构造方法
2、说明:
A.子类在初始化之前必须先初始化父类的构造方法
B.如果子类没有调用父类的构造方法,那么子类会默认调用父类的无参构造
C.如果子类调用父类的任何构造方法,那么子类就不会调用父类的无参构造
D.如果父类只有有参构造,那么子类必须调用父类的有参构造(建议在父类时,同时写有参和无参构造方法)
3、注意点:
A.this() 与super() 必须写在构造方法的第一行 this()与super() 不能同时存在
B.构造方法是不能出现递归调用(自身调用自身)
C.其他方法是不能用来调用方法

4、继承中-访问成员的方法的特点:
父子类 方法名相同 优先访问子类的方法
字符类 方法名不相同 优先访问子类的方法 没有则上查找,一直查找到Object没有则报错

5、继承的优缺点
优点:提高了代码的可扩展性,提高了代码的可复用性
缺点:耦合度比较高,代码与代码之间联系比较紧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT阿生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值