首页 > 其他分享 >动手动脑!!!!!!!!!准备冻手准备冻手!!!!!!!!!!!我说冻手你是不是二龙啊啊啊啊啊啊啊

动手动脑!!!!!!!!!准备冻手准备冻手!!!!!!!!!!!我说冻手你是不是二龙啊啊啊啊啊啊啊

时间:2022-10-03 22:00:16浏览次数:75  
标签:初始化 构造方法 静态 动脑 啊啊啊 冻手 Foo

题目:

以下代码为啥无法运行,哪里出错了?

public class Test{

   public static void main(String[] s){

     Foo obj1=new Foo();

   }}

class Foo{

 int value;

 public Foo(int intValue){

 value=intValue;}}

这是运行截图:

 

 为什么会报错呢?

因为我们在下面又单独构造了一个Foo的函数导致原来的Foo()失去了系统自动匹配的默认构造方法,这时候我们只要自己再写出来一个空构造就行

具体实现就是,在代码最后写个:public Foo(){}就OK啦!

这就是老师ppt上说的:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

继续往下走:如果一个类中,既有初始化块,又有构造方法,同时还设定了字段的初始值,那么谁说了算呢?下面来看代码和运行截图:

 

 可以看出输出的是100和300;

借此我们可以总结一下java字段初始化的规律:优先选择有参构造方法,默认值和初始化块看谁在下面,就使用谁的值。其运行顺序与调用的时间有关。

 下一个动手动脑:运行代码观察运行结果,总结静态初始化块的执行顺序。代码有点长就不在这里放了,,直接放个运行截图吧:

 

 这里我们可以看到,静态初始化块只执行了一次,虽然代码特意写了两次输出,,还有就是创建子类对象时,也会导致父类型的静态初始化块的执行。在这个程序中,爷爷辈是root,进行继承的是Mid,然后是孙子辈的leaf,,所以三个静态对象依次输出了一遍,(从这里我们还可以发现,,静态初始化块是比普通初始化块先执行的),,执行玩了静态,就执行普通的,然后执行构造方法

 最后是老师留的一个思考问题:静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员?

查阅资料后,我明白了,我们其实可以在静态方法中定义一个实例化对象,再经过实例化对象,来访问非静态成员,下面通过代码进行实现。

 

 

相关资源:(4条消息) java字段初始值_Java字段初始化规律_安夫的博客-CSDN博客

                (4条消息) 如何在静态方法中访问类的实例成员_aijjb22260的博客-CSDN博客

标签:初始化,构造方法,静态,动脑,啊啊啊,冻手,Foo
From: https://www.cnblogs.com/zhanshuang/p/16751151.html

相关文章

  • 建民老师有关类和对象动手动脑的实践性报告
    有关动手动脑的实验性总结1.P29首先定义了一个类Foo,在这个类中包含数据成员value以及有参构造函数Foo(intinitValue);在Test类中用Foo类的无参构造方法去创建一个实......
  • 9月30Java类与对象中动手动脑
    类与对象定义了一组大体相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性对象则是类的具体化,是类的实例。类通过派生类可以有子类,同样也可以有父类,形......
  • 动手动脑(四)静态初始化块的执行顺序 9.30
    packagetest2;classRoot{ static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } publicRoot() { ......
  • 动手动脑(三)9.30
    packagetest2;publicclassDemo2{ publicstaticvoidmain(String[]args){ Fooobj1=newFoo(); }}classFoo{ intvalue=100; publicFoo(in......
  • 动手动脑课后实验2
    一般初始化:1.没有继承静态变量、静态初始化块-->变量、变量初始化块–>构造方法2.有继承的情况父类静态变量、父类静态初始化块–>子类静态变量、子类静态初始化块–>......
  • Java第二讲动手动脑
    1.运行结果  上述代码方法名相同,但是数据类型不同,体现了Java重载的特点(1)方法名相同(2)参数类型不同,参数个数不同,或者是参数类型的顺序不同。也体现了Java中,当函数名......
  • [UselessFlag]我要爆刷博弈论呃呃呃啊啊啊——————!
    两次网络赛(ccpc,icpc)全被基础博弈论卡死了,感觉能写出来至少能前进几百名(对博弈论这方面恰好也不太擅长,准备学习一些小知识+从cf1300的博弈论题开始刷上1800~2000反之一想......
  • 信2105-3班张少阳第二章方法有关动手动脑问题的解决和报告
    在Java语言中,其主要模块分为:类、方法、包。而包可以理解为一个文件夹,里面存放着各种Java文件供我们使用。而我们的一切实际操作都是在方法中实现的,可以理解为类给了我们一......
  • 动手动脑:类方法的编写
     静态成员变量又称类变量,静态成员方法又称类方法,它们统称为静态成员或类成员。静态成员由static修饰,是属于整个类的,所有的对象共享这些静态成员。不需要创建任何对象,静态......
  • 动手动脑——纯随机数发生器
    线性同余方法(LCG)是一种产生伪随机数的方法。 其中A,B,M是产生器设定的常数。LCG的周期最大为M,但大部分情况都会少于M。要令LCG达到最大周期,应符合以下条件:1、B,M互......