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中是异常危险的举动,建议读者忘记这个方法,所以笔者这边不会给出具体示例;

原文地址:https://www.cnblogs.com/zszxz/p/12058036.html

时间: 2024-09-28 21:12:42

java基础-对象的初始化的相关文章

java中对象的初始化过程

class Parent{ int num = 8;// ->3 Parent(){ //super(); // ->2 //显示初始化 // ->3 //构造代码段 // ->4 show(); // ->5 } {// ->4 System.out.println("Parent constructor code run->"); } public void show(){//被覆盖 System.out.println("num

java中对象的初始化顺序

class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); }}public class HelloB extends HelloA { public HelloB() { System.out.println(&quo

JAVA基础学习-属性初始化

对象属性初始化有3种1. 声明该属性的时候初始化2. 构造方法中初始化3. 初始化块 类属性初始化有2种1. 声明该属性的时候初始化2. 静态初始化块 对象属性的初始化有三种方式的优先级 当对一个对象实例化时,首先会加载实例变量,然后再执行初始化代码块,最后执行构造方法. 对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句:(2)当static语句执行完之后,再执行main方法:(3)如果有语句new了自身的对象,将从上到下执行构造代码块.构造器(两者可以

一天一个Java基础——对象和类

1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象,可以通过其引用与其进行通信:也可以是基本类型中的一种.如果字段是对某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象向关联(使用new来实现) 4.可以把两个类放在同一个文件中,但是文件中只能有一个类是公共的.此外,公共类必须与文件同名 1.1 构造方法构造对象 构造方法是一种特殊的方

java基础之变量初始化时机

对于实例变量而言,它属于Java对象本身,每次程序创建Java对象时都需要为实例变量分配内存空间,并执行初始化. 从程序运行的角度来看,每次创建Java对象都会为实例变量分配内存空间,并对实例变量执 行初始化. 程序可以在3个地方对实例变量执行初始化: .定义实例变量时指定初始值; .非静态初始化块中对实例变量指定初始值; .构造器中时实例变量指定初始值. 每当程序调用指定构造器来创建Java对象时,该构造器必然会获得执行的机会.除此之外,该类所包含的非静态初始化块将会获得执行的机会,而且总是在

java中对象的初始化问题

最近又把java编程思想看了看.又有些收获.此书确实不错 java中的初始化相信很多人都知道.但是具体的初始化步骤,初始化几次确不一定.上代码 public class A{ public static A a = new A(); public static int i; public static int j= 2; public A(){ i++; j++; } public static void main(String[] args){ A a1= new A(); System.ou

Java基础—对象构造

1.重载 有些类有多个构造器.例如,可以如下构造一个空的StringBuilder对象: StringBuilder message = new StringBuilder(); 或者,可以指定一个初始字符串: StringBuilder message = new StringBuilder("Hello World!"); 这种特征叫做重载(overloading).如果多个方法(比如,StringBuilder构造器方法)有相同的名字.不同的参数,便产生了重载.编译器必须挑选出具

-Java基础-对象

1.创建对象(实例) new关键字 既然类是对象的模板,new 类名();就是创建一个对象的意思.New一次就创建一个对象,创建对象换个话说就是创建一遍内存.new几次就创建几个对象. 例如: //这是一个学生类 public class Student { String name; String address; int age; String sex; void dushu() { System.out.println("正在读书..."); } void lianxi() { S

Java基础知识之初始化——初始化顺序

概述 在Java中所有的变量在使用前都需要初始化.如果我们不初始化,则编译器会为变量初始化一个默认值(例如,int类型的变量的初始化默认值是0).但是初始化的顺序是什么样的,很多人搞不清楚(我以前也搞不清楚),这篇文章就是为了说明初始化的顺序是什么样的. 说明 本例子用到四个类:Person.Student.Dog.Order,其中Student继承了Person. 下文所说的静态初始化包括:静态代码块初始化.静态变量初始化. 下文所说的非静态初始化包括:非静态代码块初始化.普通变量初始化. 举