知识点总结(构造函数,构造代码块儿,this关键字等对比)

              好了,开始正题吧。前边的大纲也串想了那么多,检测一下复习的效果怎么样。这次就通过一些个常见的对比来检测一下实际的学习结果。

1.构造函数和一般函数的区别:

       首先是功能不同:

             构造函数是用来给对象初始化用,

            一般函数是用来封装某些功能用的。

        被调用的方式不同

           构造函数是在对象创建时,就会自动调用与之对应的构造函数

           一般函数是在对象创建后,需要该功能时才会被调用。

        被调用的次数不同

            构造函数在对象创建时只调用一次

           一般函数却是可以重复调用,想用几次都可以。

2.构造函数 与构造代码块儿区别

     构造代码块是给所有对象进行统一初始化,定义不同对象共性初始化内容:比如每个孩子生出来都会哭。

而构造函数是给对应的对象初始化。

3,构造函数,构造代码块儿,静态代码块儿

       对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
      注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
4.this和super区别:

        1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)

        2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
        3)super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)

        4)this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)

        5)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

   6)super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。

   7)super()和this()均需放在构造方法内第一行。

   8)尽管可以用this调用一个构造器,但却不能调用两个。

   9)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语  句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

   10)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

   11)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

 

5.静态和非静态的区别:

      生命周期不同; 静态成员存在方法区的静态方法区中,生命周期较长。

      创建的先后顺序不同;静态成员优先于非静态成员加载到内存中

      调用的方式不同,静态成员可以使用类名.成员名来调用,也可以使用对象.成员名调用

 

6,成员变量和静态变量的区别?
 
 1,生命周期的不同:
       成员变量:随着对象的创建而存在,随着对象的消失而释放
       静态变量:随着类的加载还加载,随着类的消失而消失。
 2,调用的方式不同:
      成员变量:只能被对象所调用。
      静态成员:既可以被对象所调用,又可以是类名调用。
 3,别名不同:
      成员变量:成员变量,也可以称为 实例变量
      静态变量:静态变量 也称为 类变量。
 4,数据存储的位置不同:
     成员变量:存储在堆内存的对象当中,所以也叫对象特有的数据。
     静态变量:存储在方法区中的静态方法区,也是对象的共享数据

 

7.单例设计模式:

      保证对象的唯一性。保证对象的可控性,当对于多个程序使用同一个配置的信息对象特有数据时,就必须保证该对象的唯一性。

实现分析:

  

 设计思想:1,保证该类的对象唯一性,就是为了不让其他程序通过new来创建对象。
    2,在该类中通过new创建一个本类实例。
    3,对外提供一个方法让其他程序可以获取该对象。
    步骤:1,私有化该类的构造函数,不让对象初始化,就是不让其他程序通过new来创建该类的实例,对该程序起到了可控性。
   2,在本类中通过new创建一个本类的实例,如 private static Demo a = new Demo();
      为什么加private:是因为是成员属性,将其私有化,通过对外提供公有的方法对其进行访问就行。
      为什么加Static:因为私有了构造函数后,其他程序不能new对象进行初始化,需要对外提供公有的方法,为了保证对象的唯一性,
                      也是为了不让其他程序直接创建该类的实例,因此需要用到类名.方法来访问其该类对象,对外提供的方法只能是静态的,
        因此要加Static来修饰成员,因为方法是静态后,静态的只能访问到静态的成员。
 代码体现:
 饿汉式:上来就给他吃
 class Demo
 {
  private static Demo a = new Demo();在本类中通过new来创建本类的实例。
  private Demo(){}私有化构造函数,不让其他程序创建本类对象
  public static Demo getInstance()对外提供公有的访问方法,返回类型是类类型,所以是Demo
  {
   return a;
  }
 }
 懒汉式:需要用到的时候才new对象
 class Demo
 {
  private static Demo a = null;
  private Demo(){}
  public static Demo getInstance()
  {
   if(a==null)
         a = new Demo();
   return a;
  }
 }


3,懒汉式和饿汉式的区别?
    区别:饿汉式:当类加载的时候,对象就随之建立了。
   懒汉式:当类加载的时候,对象是不会建立的,只有通过调用对外提供的公有的方法时,对象才会建立
  注意:当懒汉式被并发访问时,这时就容易出现线程安全问题,需要通过synchronized同步关键字来解决安全问题,但是会降低效率

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值