• java基础-对象的初始化


    一 前言

    本节内容将会提到方法重载,对象的初始化,对象的构造器,和this关键字的使用,以及会简要的概括一下java中对象回收机制。觉得文章不错的读者可以关注一下作者的博客和公众号(同博客名称)

    二 方法重载

    2.1 方法重载的定义

    方法重载是指同名的方法具有不同的参数列表;不同的参数列表是指参数列表个数不同或者相同的个数的参数,但具有不同的参数类型

    代码示例:

    /**
     * @Author lsc
     * <p> 方法重载</p>
     */
    public class OverLoadZ {
    
        public static void main(String[] args) {
            // 创建对象
            OverLoadZ overLoadZ = new OverLoadZ();
            // 最初的方法
            String keepWarm1 = overLoadZ.keepWarm();
            System.out.println(keepWarm1);
            // 多一个参数列表方法重载
            String keepWarm2 = overLoadZ.keepWarm("穿上大棉袄");
            System.out.println(keepWarm2);
            // 相同个数参数,不同参数类型重载
            String keepWarm3 = overLoadZ.keepWarm(2);
            System.out.println(keepWarm3);
            // 多个参数重载
            String keepWarm4 = overLoadZ.keepWarm("穿上大棉袄",2);
            System.out.println(keepWarm4);
    
        }
    
        // 最初的方法
        private String keepWarm(){
            return "开启暖气";
        }
        // 多一个参数列表方法重载
        private String keepWarm(String action){
            return action;
        }
        // 相同个数参数,不同参数类型重载
        private String keepWarm(Integer number){
            return "穿上大棉袄"+number+"件";
        }
        // 多个参数重载
        private String keepWarm (String action,Integer number){
            return action+number+"件";
        }
    }
    

    输出:

    开启暖气
    穿上大棉袄
    穿上大棉袄2件
    穿上大棉袄2件
    

    2.2 返回值类型不同为什么不是方法重载

    public string keepWarm() 方法 和 public Integer keepWarm() 方法,当我们调用这连个方法时不需要将返回值赋值给另外变量情况下 那么都是 keepWarm() 这样调用,这样就无法区分我们到底是调用了那个方法,故方法重载不能使用返回值类型作为判断依据;

    三 构造器

    3.1 对象的初始化

    如果每个对象都有一个初始化方法,也就是类似变量赋初值,那么类构造器就是对象的初始化方法;对象的构造器的命名规则同类名一致;当我们没有定义类的构造器时,编译器默认会帮我们创建一个空参的构造器;如果我们自定义了构造器,编译器则不会再次帮我们创建空参构造器;如此看来构造器也就是一个特殊的方法,其有参数列表,但没有返回值

    如何声明对象,创建对象,看代码示例,我们不想马上实例化一个对象可以对这个对象赋值为null;当需要使用到这个对象的时候再具体实例化,如果没有实例化对象,而使用了对象的成员,会报空指针异常

    /**
     * @Author lsc
     * <p> 知识追寻者 对象初始化系列</p>
     */
    public class Build {
    
        public static void main(String[] args) {
            // 声明一个对象赋值为NULL
            Build build = null;
            // 如果对象为空就创建对象
            if (build==null){
                new Build();
            }
            build.hobby();
        }
    
    
        private void hobby(){
            System.out.println("知识追寻者爱吃大西瓜");
        }
    }
    

    3.2 默认构造器

    默认构造器也就是空参构造器;如下代码中我们没有自定义构造器,我们也能创建一个空参的对象build,然后调用build对象的 hobby()方法

    /**
     * @Author lsc
     * <p> 知识追寻者 对象初始化系列</p>
     */
    public class Build {
    
    
        public static void main(String[] args) {
            Build build = new Build();
            build.hobby(); // 输出 知识追寻者爱吃大西瓜
        }
    
    
        private void hobby(){
            System.out.println("知识追寻者爱吃大西瓜");
        }
    }
    

    自定义空参构造器示例如下,可以看见结果和编译器默认创建的空参构造器执行结果一致;

    public class Build {
    
        Build(){
    		// 空参构造器,
        }
    
    
        public static void main(String[] args) {
            Build build = new Build();
            build.hobby();// 输出 知识追寻者爱吃大西瓜
        }
    
    
        private void hobby(){
            System.out.println("知识追寻者爱吃大西瓜");
        }
    }
    

    为空参构造器赋初值示例如下,可以看见先打印了构造器中的内容,然后再打印hobby方法内容;所有对象在初始化得到时候执行的是构造器方法,构造器方法中的内容也会着对象的创建而执行

    /**
     * @Author lsc
     * <p> 知识追寻者 对象初始化系列</p>
     */
    public class Build {
    
        Build(){
            System.out.println("知识追寻者爱看书");
        }
    
    
        public static void main(String[] args) {
            Build build = new Build();
            build.hobby();
        }
    
    
        private void hobby(){
            System.out.println("知识追寻者爱吃大西瓜");
        }
    }
    

    输出:

    知识追寻者爱看书
    知识追寻者爱吃大西瓜
    

    3.3 重载构造器

    学了方法重载,构造器重载也随之很简单,也就是构造器也有参数列表,根据不同的参数列表创建的构造器,我们创建的对象也随之不同

    /**
     * @Author lsc
     * <p>知识追寻者 重载构造器 </p>
     */
    public class OverLoadBulid {
    
        // 知识追寻者的爱好1
        private String hobby1;
        // 知识追寻者的爱好2
        private String hobby2;
        // 空参构造器
        OverLoadBulid(){
    
        }
        // 重载构造器1
        OverLoadBulid(String hobby1){
            // 创建对象的时候会执行构造器方法
            System.out.println(hobby1);
        }
    
        // 重载构造器1
        OverLoadBulid(String hobby1, String hobby2){
            // 创建对象的时候会执行构造器方法
            System.out.println(hobby1);
            System.out.println(hobby2);
        }
        public static void main(String[] args) {
            //   打印 知识追寻者爱看书
            OverLoadBulid loadBulid1 = new OverLoadBulid("知识追寻者爱看书");
            // 打印 知识追寻者爱看书  知识追寻者爱写作
            OverLoadBulid loadBulid2 = new OverLoadBulid("知识追寻者爱看书","知识追寻者爱写作");
        }
    }
    

    四 this关键字

    4.1 this关键字介绍

    官方指的this关键字定义如下:在实例的方法或者构造器中,this关键字保存的是当前对象的引用,可以通过this关键字调用当前对象的任何成员

    4.2 this关键字的使用场景

    1. 用在字段上;
    2. 用在构造器上;
    3. 用在实例方法上;
    /**
     * @Author lsc
     * <p> 知识追寻者 this 关键字</p>
     */
    public class ObjectZ {
    
        private String hobby1;
    
        private String hobby2;
    
        ObjectZ(String hobby1, String hobby2){
            // this 使用在字段上
            this.hobby1 = hobby1;
            this.hobby2 = hobby2;
        }
    
        // this 用在 构造器上
        ObjectZ(){
            // 这边会调用构造器  ObjectZ(String hobby1, String hobby2)
            this("知识追寻者爱看书", "知识追寻者爱写作");
        }
    
        // this 用在方法上
      public ObjectZ action(){
            // 返回对象实例
            return this;
       }
    
        public static void main(String[] args) {
            ObjectZ objectZ = new ObjectZ();
            ObjectZ action = objectZ.action();
            //  this指向的是对象的引用,此时表示同一个对象,this 就是 objectZ实例
            System.out.println(objectZ==action);//true
            // 成员以已经被赋初值
            System.out.println(action.hobby1);// 知识追寻者爱看书
        }
    }
    
    

    五 垃圾回收简介

    Java中的对象回收是通过垃圾回收机制(Garbage Collection)进行对象的回收,在垃圾回收(System.gc()方法)之前会调用对象的 finalize()方法,判断该对象是否可回收; 如果 finalize()(在gc之前java虚拟器会自动调用该方法,并且jvm只执行一次该方法)被jvm执行过,就会进行对象回收,释放空间;如果在垃圾回收之前我们手动执行了 finalize() 方法,并且又对对象进行赋值,就会造成对象逃逸,gc并没有成功,原因是 finalize()方法已经被执行了;finalize()的用途一般用在在对象回收之前关闭一些资源,不过通常我们也不会这么做,后续的学习中会有更优方案, 而且调用 finalize() 方法在java中是异常危险的举动,建议读者忘记这个方法,所以笔者这边不会给出具体示例;

  • 相关阅读:
    spring cloud stream定时器 配置rabbitmq插件安装
    字母、单词统计
    动手动脑
    原码补码反码
    ATM
    开学第一课
    周进度报告8
    周进度报告7
    JavaWeb进度报告1
    周进度报告6
  • 原文地址:https://www.cnblogs.com/zszxz/p/12058036.html
Copyright © 2020-2023  润新知