首页 > 其他分享 >动手动脑

动手动脑

时间:2022-10-08 17:01:02浏览次数:47  
标签:初始化 grams int 动脑 动手 static Foo public

一.Java字段初始化的规律。

1.类的构造方法

(1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。

(2)如果类没有定义构造函数,Java编译器在编译时会自动给它提供一个没有参数的“默认构造方法”。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

例如:

public class Test{

  public static void main(String[] args){

    Foo obj1=new Foo();          //Foo obj1=new Foo(2);

  }

}

class Foo{

  int value;                       //static int value;

  public Foo(int initValue){

    value=initValue;

  }

}

该程序是无法运行的,修改成后面语句将可以运行。

(3)同一个类可以有多个构造函数,多个构造函数之间通过参数来区分.这是方法重载的一个实例。

构造函数之间可以相互调用。

例如:

public class Test{

  public static void main(String[] args){

    Foo obj1=new Foo();

    System.out.println(Foo.grams);

    Foo obj2=new Foo(5);

    System.out.println(Foo.grams);

  }

}

class Foo {

  static int grams;

  Foo() {

    this(55);

  }

  Foo(int g){

    grams=g;

  }

}

程序的运行结果为:

55

5

 

2.类的初始化块

(1)可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员。

类的这种“没有名字”的“成员”,多用于初始化类的字段。

public class Test {

  public int value=200;

  {

    value=100;

  }

}

3.

执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

执行类的构造函数

类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

例如:

public class Test{

  public static void main(String[] args){

    Foo obj1=new Foo();

    System.out.println(Foo.grams);

    obj1=new Foo(5);

    System.out.println(Foo.grams);

  }

}

class Foo {

  {

    grams=100;

  } public static int grams=50;

 

  public Foo(int g){

    grams=g;

  }

  public Foo() {}

}

结果为:

100

5

但当public static int grams=50;语句在 {grams=100;}之前时结果则为:

50

5

4.继承关系中的初始化

例如:

class B

{

  public static int data=100;

  static

  {System.out.println("B初始化 data="+data);} 

}

class A extends B

{

  public static int data=50;

  static

  {System.out.println("A初始化 data="+data);}

}

public class Test

{

  public static void main(String[] args) 

  {

    new A();

  }

}

运行结果为:

B初始化 data=100

A初始化 data=50

二.如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)

类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中"寄居",不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。

三.静态初始化块的执行顺序。

与普通初始化块类似的是,系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,而且还会一直上溯到java.lang.Object类,先执行java.lang.Object类中的静态初始化块,然后执行其父类的静态初始化块,最后才执行该类的静态初始化块。经过这个过程,才完成了该类的初始化过程。只有当类初始化完成后,才可以在系统中使用这个类,包括访问类method、类Field,或者用这个类来创建实例。
四.Integer类的装箱和拆箱到底是怎样实现

装箱就是  自动将基本数据类型转换为包装器类型;拆箱就是  自动将包装器类型转换为基本数据类型。

在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。

因此可以用一句话总结装箱和拆箱的实现过程:

装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 intValue方法实现的.

 

 

标签:初始化,grams,int,动脑,动手,static,Foo,public
From: https://www.cnblogs.com/LvJinshuai/p/16769483.html

相关文章

  • 动手动脑--静态方法中只允许访问静态数据,如何在静态方法中访问类的实例成员
    package test.two; public class jingtaihanshu{       int x=3;static int  y =4;public static void Method()//静态方法    {  ......
  • 动手动脑--运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块
    class Root{static{System.out.println("Root的静态初始化块");}{System.out.println("Root的普通初始化块");}public Root(){System.out.println("Root的无参数的构造器......
  • 动手动脑--观察结果
    1.以下代码无法通过编译,哪里出错了?原因:因为构造函数Foo()没有进行定义,如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。截图:2..请依据代码的输出结......
  • 动手学深度学习:机器翻译
    《动手学深度学习》的最后一篇文章,在这篇文章里,将学习什么是编码器解码器的结构,什么是束搜索,以及注意力机制是什么,最后就是仔细地研究一下课本中最后一个机器翻译的代码实......
  • 方法:动手动脑1 下列代码哪里错了:
    下列代码哪里错了:  原因:因为类中自定义了一个构造方法,系统不在默认构造方法,图中构造方法有一个参数,但使用方法时无参数,所以报错。 ......
  • 方法 动手动脑3
    静态初始化块顺序:   先进行父类的静态初始化块,静态初始化块都初始化完后,再从最高级的父类进行初始化块和构造函数进行初始化,依次进行。......
  • 自己动手写Docker pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1DnzteTXZH8Cyliabhlotrg点击这里获取提取码  自己动手写Dockerpdf......
  • 动手动脑9.30
                   动手动脑9.301. 该代码在Fooobj1=newFoo();的地方出错了,出错原因是main方法在引用变量时Foo()没有被定义,Foo类......
  • 9/30课堂笔记及动手动脑
    类的定义:1、定义了一组大体上相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性。2、对象则是类的具体化,是类的实例。3、类通过派生可以有子类,同样也......
  • 【动手实战】你真的会用 Stream ?来试试看!
    本文已参与「新人创作礼」活动,一起开启掘金创作之路。1.初始化数据以下所提到的内部Map即map1、map2,外部Map即mappublicclassStreamPractice{@Data......