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

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

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

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

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

😘系列专栏:java学习

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

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

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

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

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

🔮6.代码块

🎃6.1普通代码块

普通代码块就是在方法中使用花括号定义的代码块,例如:

public class ClassCreat {
    public static void main(String[] args) {
        {
            int a = 12;
            int b = 48;
            String name = "weijianhuawen";
        }
    }
}
复制代码

18

🎃6.2构造代码块

构造代码块为类中方法外定义的代码块,也叫实例代码块,一般用来初始化成员变量(我觉得多此一举),例如:

class CodeBlock {
    private int c;
    private int d;
    public int sum;
​
    //构造代码块 or 实例代码块
    {
        this.c = 10;
        this.d = 12;
        sum = this.add(c, d);
    }
    
    public int add(int x, int y) {
        return x + y;
    }
}
复制代码

19 ❗️注意:构造(实例)代码块优先于构造函数执行。

🎃6.3静态代码块

使用static修饰的构造代码块称为静态代码块,它一般用来初始化静态成员变量的属性。它和类储存在一起,存储在方法区。

class CodeBlock {
    public static int a;
    public static String name;
    
    //静态代码块
    static {
        a = 18;
        name = "未见花闻";
    }
}
复制代码

20 ❗️注意:

  1. 静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
  2. 静态代码块执行完毕后, 实例代码块(构造代码块)执行,再然后是构造函数执行。

🔮7.对象

🎃7.1输出对象数据

当我们对类的引用进行打印时会输出什么呢?我们来试一试:

class Student {
    public String name;
    public String sex;
    public int age;
    public String id;
    public String major;
​
    public void getName() {
        System.out.println(name);
    }
    public void getMajor() {
        System.out.println(major);
    }
}
public class ClassCreat {
    public static void main(String[] args) {
        Student sc = new Student();
        sc.name = "weijianhuawen";
        sc.sex = "man";
        sc.age = 1;
        sc.id = "5201314";
        sc.major = "computer";
​
        System.out.println(sc);
    }
}
复制代码

21 为什么输出的不是地址呢?因为Java是具有很强的安全性,它把地址进行了处理,使用 toString方法返回一个字符串,这个打印的数据正是这个字符串。至于为什么是toString方法,我们来溯源一下println方法的真面目: 按住ctrl点击进入println方法: 22 通过溯源,我们就知道了对引用进行打印会输出类名@该引用的哈希值这样一个字符串。 我们试一试自己写上这样一个方法,方法名返回值均与toString方法相同。 假如我写成这样,然后放在Student类当中:

public String toString() {
    return "未见花闻";
}
复制代码

我们再来运行一下这个程序:

class Student {
    public String name;
    public String sex;
    public int age;
    public String id;
    public String major;
​
    public String toString() {
        return "未见花闻";
    }
    public void getName() {
        System.out.println(name);
    }
    public void getMajor() {
        System.out.println(major);
    }
}
public class ClassCreat {
​
    public static void main(String[] args) {
        Student sc = new Student();
        sc.name = "weijianhuawen";
        sc.sex = "man";
        sc.age = 1;
        sc.id = "5201314";
        sc.major = "computer";
​
        System.out.println(sc);
    }
}
复制代码

23 得到了我自己所写toString所返回的字符串,这其实是对方法进行了重写,如果子类中的方法与父类中的方法名返回值参数及其参数个数相同,就构成了方法的重写,会优先执行子类的方法(该内容在后续博客关于继承中详细介绍,这里先了解)。我所写的这个类Student是子类,原来toString方法是在Object类中的,这个Object类就是父类,所以会优先执行我所写的toString方法。 24idea编译器中,能够自动生成toString方法,可以选择性的输出一个类中成员变量的数据。 与自动生成GetterSetter方法类似: 25 自动生成的代码: 26 再来运行一下程序:

class Student {
    public String name;
    public String sex;
    public int age;
    public String id;
    public String major;
​
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", sex='" + sex + ''' +
                ", age=" + age +
                ", id='" + id + ''' +
                ", major='" + major + ''' +
                '}';
    }
​
    public void getName() {
        System.out.println(name);
    }
    public void getMajor() {
        System.out.println(major);
    }
}
public class ClassCreat {
​
    public static void main(String[] args) {
        Student sc = new Student();
        sc.name = "weijianhuawen";
        sc.sex = "man";
        sc.age = 1;
        sc.id = "5201314";
        sc.major = "computer";
​
        System.out.println(sc);
    }
}
复制代码

27

🎃7.2匿名对象

所谓的匿名对象,就是不使用一个类的引用变量,而是直接调用,那么生成的这个对象是一次性的,只能进行一次访问,因为访问一次之后你就找不到它了。

  1. 没有引用的对象称为匿名对象.
  2. 匿名对象只能在创建对象时使用.
  3. 如果一个对象只用一次, 后面不需要用了, 可以考虑使用匿名对象.
class AnonymousObject {
    public int a;
​
    public AnonymousObject() {
        this.a = 188;
    }
}
public class ClassCreat {
    public static void main(String[] args) {
        System.out.println(new AnonymousObject().a);
    }
}
复制代码
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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