0


类和对象-下篇

封装

什么是封装

面向对象一共三大特性:封装,继承和多态

封装带来的特性是:保护性,易用性。(封装有很多中表现形式)

之前写的程序中,我们不难发现,任何一个对象可以随意更改调用类中的成员变量和方法,这样非常不安全,所以需要保护起来,封装起来。

或者我们写的程序,作为用户而言,只要实现具体功能,并不需要知道组成他的具体部分是什么,所以可以封装起来,这是易用性的体现。

private实现封装

权限修饰符

Java的权限修饰符指的是,修改的属性,方法,类可见的范围到底有多大

一共有四大访问修饰符,可见的范围由小到大以此为

private < default(不需要写这个关键字,啥也不写就是default)-包访问权限 < protected < public

修饰符 private 只是实现封装的一种。

public整个程序可见

被private修饰的属性或方法称为私有属性或私有方法

private只在类的内部可见,可以直接用

private不能修饰外部类:类的创建就是为了让人看见的

如何在类外部使用私有属性(getter,setter)

getter方法:获取私有属性

setter方法:更改私有属性(有命名规则的成员方法)

至于哪些属性需要提供setter让外部修改,需要根据属性特征决定


构造方法

构造方法是非常特殊的一类方法,使用关键字new实例化对象实际上就是调用的该类的构造方法。

使用关键字new产生一个对象时,大概分为以下两步:

1.为对象在堆中分配空间。

2.调用对象的构造方法为对象成员变量赋值。

构造方法语法规则

1.方法名与类名称完全相同

2.构造方法没有返回值声明(不是void)

3.一个类至少存在一个构造方法,若没有显示定义,编译器会生成一个默认的无参构造

结合内存说明

在方法中产生对象时,

1.先在堆上开辟一块空间(大小由该类中成员变量的属性决定)

2.调用对象的构造方法为所有成员变量赋值

成员变量的默认值就是在构造方法中赋值的。

有初值的成员变量同样在构造方法中赋值。

构造方法的重载

因为成员变量在建类时就定义好了,所以只有参数的个数不同。

对象不可以调用构造方法,

构造方法只在JVM产生对象时调用。对象实例化结束,无法在程序中手动调用构造方法再次实例化对象。


this关键字

this表示当前对象的引用

1.调用当前对象的成员变量

因为程序的就近匹配原则,当我们构建方法传递形参的时候,如果要使用的实参名和形参名相同,系统会就近匹配,也就是说可能形参等于传的形参自身,实参没变化

为啥使用一样的名字?因为这样一眼就可以看出是哪个参数,所以不能改名字。

这个时候我们就是需要使用this关键字调用成员变量。

2.调用当前的对象方法

调用类中的成员方法

之前我们说过,成员方法是可以直接调用成员方法的,调用成员方法需要对象,那么调用的时候对象从哪里来呢,this就代表对当前对象的引用。

如果我们不写this,系统会自动加上this

构造方法的互相调用

如果不同参数的构造方法之间有重复的调用

构造方法互相可以通过this(参数)的方法调用

this调用构造方法必须放在当前构造方法首行,且不能成环

3.表示当前对象的引用

this就相当于一面镜子,可以表示当前对象引用调用的属性或者方法


代码块

代码块就是括号{}括起来的代码部分

根据定义的代码块位置以及关键字的不同可以分为以下四种代码块

普通代码块出括号销毁

构造块

直接定义在类中,不加任何修饰的代码块,优先于构造方法执行,有几个对象就调用几次构造块

class Test1{
    private int a=150;
    {
        a=100;
    }
    public Test1() {
        a = 10;
    }
    public void p () {
        System.out.println(a);
    }
}
public class Test {
    public static void main(String[] args) {
        Test1 test = new Test1();
        test.p(); //a = 10
    }
}

静态代码块

定义在类中,使用static修饰的代码块,在类加载时执行一次

问题:static属性和static代码块谁先执行

static属性存在于方法区中,在类定义的时候就会有初始值,初始值为10,这个类就被放到方法区中了。 => 这个类只是定义了,还没加载

static代码块,当主方法使用了Test1 , 就需要把Test1从方法区加载到内存,类加载 => static代码块执行

class Test1{
    static int a=150;
    static {
        a = 100;
        System.out.println("静态代码块执行");
    }
    public Test1() {
        System.out.println("构造方法执行");
    }
    
    public void good() {
        System.out.println(a);
    }
}
public class Test {
    public static void main(String[] args) {
        Test1 test = new Test1();
        Test1 test2 = new Test1();
        test.good();
    }
}

匿名对象和toString方法

匿名对象:

new出来的对象,没有引用指向,用一次就销毁。

new Person(); 常用于测试某些功能,用一次被JVM销毁。

toString方法:注意大小写

当一个引用类型需要调用println函数打印时,我们如果采用普通的println发现打印出的是地址,我们想要属性的话可以自己实现一个toString方法。

class Test1{
    private String name;
    public Test1(String name) {
        this.name = name;
    }
    public String toString() {
        String str = "我的名字是"+this.name;
        return str;
    }
}
public class Test {
    public static void main(String[] args) {
        Test1 test = new Test1("小王");
        System.out.println(test);
    }
}

如何判断是否写正确?

有左边这个图标就对了

标签: java

本文转载自: https://blog.csdn.net/weixin_65278827/article/details/124191119
版权归原作者 小白的含金量 所有, 如有侵权,请联系我们删除。

“类和对象-下篇”的评论:

还没有评论