萌新卷妹带你从头复习JavaSE-类与对象

举报
京与旧铺 发表于 2022/10/31 17:21:52 2022/10/31
【摘要】 萌新卷妹带你从头复习JavaSE-类与对象✨欢迎关注🖱点赞🎀收藏⭐留言✒🔮本文由京与旧铺原创,csdn首发!😘系列专栏:java学习💻首发时间:🎞2022年10月17日🎠🎨你做三四月的事,八九月就会有答案,一起加油吧🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲💬推荐一款模拟面试、刷...

萌新卷妹带你从头复习JavaSE-类与对象

✨欢迎关注🖱点赞🎀收藏⭐留言✒

🔮本文由京与旧铺原创,csdn首发!

😘系列专栏:java学习

💻首发时间:🎞2022年10月17日🎠

🎨你做三四月的事,八九月就会有答案,一起加油吧

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲

💬推荐一款模拟面试、刷题神器👉[点击进入网站

🔮4.类的封装

🎃4.1privite实现封装

上面我们定义类中的变量或方法时,都是使用了public关键字修饰,使用该关键字修饰的变量或方法,表示该变量或方法是公共的,在其他和当前类当中都可以使用,但是如果使用privite关键字修饰变量或方法,表示该变量或方法是私有的,只有它所属类才能访问使用,在其他类无法对该变量或方法进行访问或调用,这也体现了Java的安全性。 看下面一段代码:

class PriviteMember {
    private int add(int a, int b) {
        return  a + b;
    }
}
​
public class ClassCreat {
    public static void main(String[] args) {
        PriviteMember pm = new PriviteMember();
        int x = 10;
        int y = 12;
        System.out.println(pm.add(x, y));
    }
}

由于我们将PriviteMember类中的add方法私有,然后在另一个类中实例对象并使用add,我们发现编译器报错了!

10 如果调用add的方法(示例程序中是mian方法)与add在同一个类,再次执行程序:

public class ClassCreat {
    private int add(int a, int b) {
        return  a + b;
    }
    public static void main(String[] args) {
        ClassCreat pm = new ClassCreat();
        int x = 10;
        int y = 12;
        System.out.println(pm.add(x, y));
    }
}

我们发现这个方法能够正常运行: 11

🎃4.2getter和setter方法

关键字privite所修饰的变量或方法只能在同一个类之中使用,那如果我们想在另一个类中对那个被privite变量或方法进行修改或调用,能不能实现呢?其实是可以的,但是是间接性的,就是我们在privite修饰的变量或方法所在类中定义一个public修饰的方法来进行对privite修饰的成员进行访问与修改。

我们可以写出这样的一个类:

class PriviteMember {
    private int m;
    private double n;
    private int add(int a, int b) {
        return  a + b;
    }
    
    public int getterInt() {
        return m;   //获取m
    }
    public double getterDouble() {
        return  n;//获取n
    }
    public void setterInt(int x) {
        m = x;//设置m
    }
    public void setterDouble(double y) {
        n = y;//设置n
    }
    public int getAdd(int x, int y) {
        return add(x, y);//调用私有方法add
    }
}

我们在其他类中来调用该类其他公共的变量或方法,能够间接地对私有的成员进行访问与修改。

public class ClassCreat {
    public static void main(String[] args) {
        PriviteMember pm = new PriviteMember();
        pm.setterInt(12);//对m赋值
        System.out.println(pm.getterInt());//获取m的值
        
        pm.setterDouble(3.14);//对n赋值
        System.out.println(pm.getterDouble());//获取n的值
​
        int a = 14;
        int b = 12;
        System.out.println(pm.getAdd(a, b));//间接调用私有方法add
    }
}

12 其实在编译器idea中,可以自动生成gettersetter方法,用来设置和获取一个类中私有变量的值或私有方法的返回值。 idea编译器中,在代码区右键,找到Generate,点进去然后选择Getter或者Setter就能自动帮助你生成设置和获取私有成员变量的值。 13

14 根据需要选择GetterSetter,然后选择需要访问的变量,按住ctrl能够多选。 15 16 this关键字修饰,表示的是当前对象中的引用,能够用来访问当前对象的成员变量与方法。

🔮5.构造方法

🎃5.1new执行过程

👻5.1.1new实例化对象过程

使用关键字new实例化对象过程中,其实分为两步:

  1. 为对象分配内存空间

  2. 调用构造方法(如果没有类中任何构造方法,会自动生成一个不带参数的构造方法)

👻5.1.2构造方法

构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用,所以构造函数是定义在类中的,他有以下特点:

  1. 方法名称必须与类名相同。

  2. 没有返回值。

  3. 每个类中至少有一个构造函数,如果类中没有定义,则会自动生成一个不带参数的构造方法。

  4. 构造方法支持重载, 规则和普通方法的重载一致。

  5. 若类中定义了含参数的构造方法,则默认的无参构造方法将不再生成。

🎃5.2this关键字

关键字this在前面使用Setter生成函数时,发现自动生成的函数中有变量被this修饰,被this关键字修饰,表示的是当前对象中的引用,能够用来访问当前对象的成员变量与方法。

❗️注意!this表示当前对象的引用,而不是当前对象,在构造函数中我们是可以使用this,但是调用构造方法时,该对象还没实例化完成,只是分配了内存,说明对象还没有定义好,但是引用已经生成了,因为内存分配完成了,那么地址也就出来了,引用也自然而然也出来了。所以this表示的是当前对象的引用,而不是当前对象。

关键字this的三种使用方式: |方式|解释| |---|---| this.成员变量名 | 访问当前对象的属性(成员变量) this.方法名(对应参数列表)| 调用当前对象的方法 this()|在构造方法中调用当前对象的其他构造方法,必须位于构造方法的第一行

如下代码可以证明this是可以在构造方法中使用的:

class ConstructionMethod {
    public int a;
    private int b;
​
    public ConstructionMethod() {
        System.out.println("这是一个不带参数的构造方法!");
    }
    public ConstructionMethod(int x) {
        this.b = x;
        System.out.println("这是一个带有参数的构造方法!可以给成员变量b赋值!赋值后b = " + this.b);
    }
    public ConstructionMethod(int x, int y) {
        this.a = this.add(x, y);
        System.out.println("这是一个带有两个参数的构造方法!可以计算两个整数的和!这两个数的和为:" + a);
    }
    private int add(int m, int n) {
        return m + n;
    }
}
public class ClassCreat {
    public static void main(String[] args) {
        ConstructionMethod cm1 = new ConstructionMethod();
        System.out.println("------------");
        ConstructionMethod cm2 = new ConstructionMethod(12);
        System.out.println("------------");
        ConstructionMethod cm3 = new ConstructionMethod(18, 2);
    }
}

17

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。