• Java构造器浅析


    Java构造器

    • 问题引出

      1.先看一段简单创建对象的例子:

      public class constructTest {	
      	public static void main(String[] args) {
      		Index t = new Index();
      		t.dance();
      	}
      }
      
      class Index{
      	public void dance(){
      		System.out.println("跳舞.....");
      	}
      }
      
      

    构造器分析

    ① 代码中有Index t = new Index()这样一条语句,可能你会觉得这不就是创建对象吗?有什么好分析的…可是下面的类名是Index,而不是Index(),按道理来说,如果是创建对象,那我们应该写成Index t = new Index,为什么加了括号呢?一般都是在调用方法的时候才加括号,没错,其实这里也就是类似于调用方法,只不过这里是调用类的构造器(构造器不是方法,但是类似于方法,在官方文档中,他和方法是并列的。)

    在这里插入图片描述
    ②当按住Ctrl 键再点击上面的Index()的时候,就会跳转到下面的Index这里,也就说明在创建对象的时候,确实是调用下面的构造器。

    ③初始化信息

    public class constructTest {	
    	public static void main(String[] args) {
    		Index t1 = new Index();
    		Index t2 = new Index("小芳",1);
    		t1.demo();
    		t2.demo();
    	}
    }
    
    class Index{
    	public String name;
    	public int age;
    	
    	public Index(){
    		
    	}
    	public Index(String name, int age){
    		this.name = name;
    		this.age = age;		
    	}
    	public void demo(){
    		System.out.println(name+"刚出生,今年"+age+"岁了!");
    	}
    	
    }
    //输出结果
    null刚出生,今年0岁了!
    小芳刚出生,今年1岁了!
    
    

    ②可以这样理解,当创建一个对象的时候,就像一个小孩的出生,我们会给他取名,并且默认规定他就是一岁。而对于对象来说,也可以类似的在创建的时候默认的给他初始化一些信息。而这些操作就把他放到构造器里面去,当实例化对象的时候,构造器里的内容也被执行,那么我们需要的初始化信息也就有了。


    总结构造器作用

    1.创建对象

    2.初始化对象的信息。


    • 其他注意事项

      1.构造器定义方法: 权限修饰符 类名 ( 形参列表){ }

      2.当创建对象的时候,如果没有显式的写出构造器,那么系统会默认使用自带的构造器,只是这个构造器没有初始化功能,因为他也不知道你要初始化那些属性,所以一般都会显式的对构造器进行重写。

      3.构造器还可以进行重载,当重载以后,创建对象的时候会根据构造器参数列表信息来选择使用哪个构造器。如果自己写了构造器,那么系统默认的构造器就不再使用!

      4.构造器不能是abstract, static, final, native, strictfp, 或者synchronized修饰,原因如下:

      ​ ①构造器不是通过继承得到的,所以没有必要把它声明为final的。

      ​ (被final修饰的变量就是常量,方法不能被重写但可以重载,类不能被继承。)

      ​ ② 一个抽象的构造器将永远不会被实现,所以也不能声明为abstract的。

      ​ ③构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。

      ​ ④没有实际的需要把构造器定义成同步的,因为它将会在构造的时候锁住该对象,直到所有的构造器完成 它们的工作,这个构造的过程对其它线程来说,通常是不可访问的。 (synchronized)

      ​ ⑤本地化的方法情况特别复杂,所以JVM调用起来非常麻烦,需要考虑很多种情况,没有native关键字的 情况下,JVM实现起来比较容易。

  • 相关阅读:
    Mybatis 动态sql(转载)
    mapper映射文件配置之select、resultMap(转载)
    mapper映射文件配置之insert、update、delete(转载)
    MyBatis主配置文件(转载)
    函数装饰器和闭包(二)
    函数装饰器和闭包(一)
    指针的指针(二)
    指针的指针(一)
    Makefile基础(三)
    Python之多线程与多进程(二)
  • 原文地址:https://www.cnblogs.com/coding-996/p/12000247.html
Copyright © 2020-2023  润新知