美文网首页
构造方法与匿名对象

构造方法与匿名对象

作者: 诗与酒 | 来源:发表于2018-06-04 19:53 被阅读0次

前言:

实例化对象的产生格式:

类名称 对象名称 = new 类名称()

对于以上格式的观察组成部分:

  • 类名称 :任何的对象都应该有其对应的类,因为没有类就不知道对象所具备的功能
  • 对象名称: 是一个唯一的标记,表示的是以后操作的属性的标记
  • 关键字new: 表示开辟新的堆内存空间。
  • 类名称( ) :构造方法。

所以通过以上的分析就应该已经清楚了,
所谓的构造方法指的就是在使用关键字new实例化新对象的时候来进行调用的操作方法。
但是对于构造方法的定义也需要遵守如下原则:

方法名称必须与类名称相同,并且构造方法没有返回值类型声明。
同时每一个类中一定会至少存在有一个构造方法,
如果类中没有明确的定义任何一个构造方法,那么将自动生产一个无参的,什么都不做的构造方法。

范例 1:定义一个无参 什么都不做的构造方法。

class Person{
    private String name;
    private int age;
    // 构造方法名称与类名称相同,并且没有返回值类型声明
    public Person(){    //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
    } 
}

疑问:既然构造方法中没有返回数据,为什么不用void定义呢?
现在的类中的组成: 1) 属性,2)普通方法,3)构造方法。

  • 属性是在对象开辟堆内存的时候就开辟的空间。- (属性是什么时候开辟的?)
  • 构造方法是在使用关键字new同时调用的。- (构造方法是在什么时候被调用的?)
    • public Person() ,构造方法与普通方法 从定义结构上 就出现了偏差。
  • 普通方法是在对象已经实例化完成了(空间开辟了,构造方法执行了)再调用的,可以调用多次。- (是在什么时候被调用的?)
    • public void Person(),命名不标准

对于类中可以自动生成的无参构造方法实际上是有一个前提的:
你类中没有定义任何的构造方法,相反,如果你现在类中定义了构造方法,那么此类的默认构造方法将不会自动生成。
范例 2:类中定义一个有参构造方法

class Person{
    private String name;
    private int age;
    //定义了一个有参构造,则默认的无参构造将不会在编译时自动生成
    public Person(String n,int a){  //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
        name = n;
        setAge(a);
    } 
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        if (age>=0 && age<=250){
            age = a;
        }else{
            age = 0;
        }
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public void info(){
        System.out.println("name="+name+",age="+age);
    }
}
public class Test{
    public static void main(String[] args){
        Person per = new Person("张三",20);
        per.info();
        
    }
}

构造方法作用:

  • 构造方法的调用和对象内存分配几乎是同步完成的,所以可以利用构造方法设置类中的属性内容,构造方法可以为类中的属性进行初始化处理;
  • 通过构造方法设置内容实际上就可以避免重复的setter调用了。

在实际开发之中,setter方法 除了具备有设置内容之外,也可以承担修改数据的操作

既然构造方法本身属于方法,那么方法 就一定可以进行重载,而 构造方法的重载 更加简单,因为方法名称就是类名称,所以你能够做的只是实现参数的类型或个数不同这一概念。
范例 3:构造方法重载。

class Person{
    private String name;
    private int age;
    public Person(){}
    //定义了一个有参构造,则默认的无参构造将不会在编译时自动生成
    public Person(String n){    //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
        name = n;
        
    } 
    public Person(String n,int a){  //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
        name = n;
        setAge(a);
        
    } 
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        if (age>=0 && age<=250){
            age = a;
        }else{
            age = 0;
        }
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public void info(){
        System.out.println("name="+name+",age="+age);
    }
}
public class Test{
    public static void main(String[] args){
        Person per = new Person("张三");
        per.setAge(18);
        per.info();
        
    }
}

但是在进行构造方法重载的时候请注意一下你的定义结构。建议若干个构造方法按照参数的个数采用升序或降序排列。
同时也需要注意一点:在进行类定义的时候,请按照如下顺序完成

  • 第一部分写属性
  • 第二部分写构造方法
  • 第三部分写普通方法。

发现构造方法可以传递属性的内容,那么很多时候为了方便,往往会使用匿名对象完成。

范例 4:匿名对象

public class Test{
    public static void main(String[] args){
        new Person("张三",20).info();
        
    }
}

由于匿名对象不会有任何的栈空间所指向,所以使用一次之后就将成为垃圾。
你现在是否使用匿名对象没有绝对的定论,你一切都可以使用有名对象

总结:

  • 构造方法每个类中至少存在有一个
  • 构造方法的名称与类名称相同,无返回值类型定义
  • 构造方法允许重载,重载时只需要考虑方法的参数类型和个数即可

相关文章

  • 构造方法与匿名对象

    前言: 实例化对象的产生格式: 类名称 对象名称 = new 类名称() 对于以上格式的观察组成部分: 类名称 :...

  • 构造方法与匿名对象

    构造方法 对象的产生格式:①类名称 ②对象名称 = ③new ④类名称(); ①类名称: 规定了对象的类型,即:...

  • 构造方法与匿名对象

    实例化对象:类名称 对象名称=new 类名称(); 类名称:任何一个对象都有类,没有类就不知道有什么功能 对象名称...

  • Java 匿名函数、构造方法、构造代码块、方法重载与方法重写

    匿名函数 Java Lambda 表达式(又名闭包(Closure)/匿名函数) 构造方法 构造方法的作用:给对象...

  • Java构造方法与匿名对象

    构造方法 首先我们看一个格式:实例化对象操作 类名称 对象名称 = new 类名称(); 每个组成部分的意义: ①...

  • 构造方法和匿名对象

    一.构造函数 实例化对象需要如下的语法:(1)数据类型(2)对象名称 =(3)new(4)数据类型()数据类型()...

  • 9-构造方法与匿名对象

        现在的程序在使用类的时候一般都按照了如下的步骤进行: 声明并实例化对象,这个时候实例化对象中的属性并没有任...

  • 第二天___②

    课时8 构造方法与匿名对象 实例化对象的格式①类名称 ②对象名称 = ③new ④类名称();每一个点的目的 ①类...

  • 第五章:面向对象基础——构造方法与匿名对象。

    本章目标 掌握构造方法的概念及调用时机 掌握构造方法的重载 掌握匿名对象的使用 1、具体内容 1.1、什么叫构造方...

  • 深入分析 Handler机制源码

    在主线程中 通过匿名内部类 创建Handler类对象 分析Handler的构造方法 当创建Handler对象时,则...

网友评论

      本文标题:构造方法与匿名对象

      本文链接:https://www.haomeiwen.com/subject/ccgysftx.html