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

动手动脑

时间:2023-09-30 22:33:10浏览次数:39  
标签:初始化 obj 变量 对象 动脑 equals 动手 MyClass

1.

早期经常这样定义变量 int value=100; 前面的示例中这样定义变量 MyClass obj = new MyClass(); 这两种方式定义的变量是一样的吗?

不,这两种方式定义的变量并不相同。
在第一个例子中,int value = 100; 是在Java中定义一个名为value的整数类型变量,并将其初始化为100。这是基本数据类型的变量定义方式,用于存储简单的数值。
而在第二个例子中,MyClass obj = new MyClass(); 是在Java中定义一个名为obj的对象变量,并使用new关键字创建了MyClass类的一个新实例,并将其赋值给obj变量。这种方式适用于引用数据类型,用于存储对象实例的引用。
因此,这两种方式定义的变量类型和用途不同。基本数据类型的变量存储的是简单的数值,而对象变量则存储的是对象的引用,可以通过该引用访问对象的属性和方法。

2.

对象变量也可以使用“==”判断两变量值是否相等吗?

对象变量可以使用"=="来判断两个变量是否引用了同一个对象(即对象的内存地址是否相同),而不是判断对象的值是否相等。在Java中,"=="用于比较对象引用的地址。

3.

false

4.

 

  1. 自定义的equals方法:这个类定义了一个自己的equals方法,而不是使用继承自Object类的默认equals方法。这是因为默认的equals方法只比较对象引用地址,而不比较对象的内容。通过自定义equals方法,你可以实现你自己的逻辑来比较对象的内容。

  2. 比较对象的Value属性:在equals方法中,它比较了对象的Value属性是否相等,而不是比较整个对象。这表示该类的equals方法只关心Value属性是否相等,而不关心其他可能存在于类中的属性。

  3. 参数类型:equals方法接受一个名为obj的参数,这个参数类型是MyTestClass。这是因为equals方法通常用来比较两个相同类的对象,所以它接受一个同类对象作为参数。

  4. 返回类型:equals方法返回一个布尔值,指示两个对象是否相等。如果Value属性相等,它返回true,否则返回false

  5. 使用了成员变量:该方法比较了对象的成员变量,这意味着在比较对象时,它关注的是对象内部状态的一部分(即Value属性)。这种方式可以使你更灵活地定义两个对象何时被认为是相等的

  6.  提供的代码无法通过编译,因为在Test类的main方法中尝试创建Foo对象时,没有提供所需的构造函数参数。Foo类定义了一个接受整数参数的构造函数,但在main方法中没有提供这个参数。

  7.  

    public static void main(String[] args) {
        InitializeBlockClass obj = new InitializeBlockClass();
        System.out.println(obj.field); // 输出结果: 4
        
        obj = new InitializeBlockClass(300);
        System.out.println(obj.field); // 输出结果: 300
    }
    

    根据输出结果可以总结以下规律:

    1. 字段初始化块:在类定义中,类包含一个字段初始化块,其中使用来为字段赋值。这个字段初始化块在创建对象时会被执行。InitializeBlockClassfield = 4field

    2. 无参构造函数:当使用无参构造函数创建对象时,首先执行字段初始化块来给字段赋值为4。然后输出的值为4。InitializeBlockClassfieldobj.field

    3. 有参构造函数:当使用有参构造函数创建对象时,会跳过字段初始化块,并通过构造函数参数来初始化字段。在这种情况下,使用参数值来为字段赋值。然后输出的值为构造函数参数所提供的值。InitializeBlockClassfieldfieldobj.field

    综上所述,Java字段的初始化规律是:

    • 字段初始化块在对象创建时会被执行,可以在其中为字段进行初始化。
    • 当对象创建时,如果使用了构造函数,则构造函数参数可以用来初始化字段,而字段初始化块会被跳过。
    • 如果没有提供显式的初始化值,在没有字段初始化块或构造函数参数的情况下,Java会为字段提供默认值(例如,整数类型的字段默认值为0,布尔类型的字段默认值为false,引用类型的字段默认值为null等)。
    • 在初始化代码块、构造函数参数和默认值中,以最后的赋值为准。    

      9.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序

    • ”初始化块的执行顺序是按照类加载的顺序依次执行的,而实例初始化块和构造函数则是在对象创建时按照继承层次依次执行的

    • 10.

      静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)? 请编写代码验证你的想法。(发表到博客)

    • 在静态方法中,不能直接访问类的实例成员(非静态字段或方法),因为静态方法在对象创建之前就可以被调用,而实例成员需要在对象创建之后才能访问。

      然而,可以通过传递对象的引用作为参数,从而在静态方法中访问类的实例成员。以下是一个示例代码:

      java
      public class MyClass {
          // 实例成员
          private int myField;
          
          // 静态方法
          public static void staticMethod(MyClass obj) {
              int value = obj.myField;  // 使用对象引用访问实例成员
              System.out.println(value);
          }
          
          public static void main(String[] args) {
              MyClass obj = new MyClass();
              obj.myField = 10;
              
              staticMethod(obj);  // 通过传递对象的引用来访问实例成员
          }
      }
    • 11.

      Integer类的装箱和拆箱到底是怎样实现的?

      在这个示例中,通过调用 Integer.valueOf(200) 创建了一个 Integer 类型的对象。然后,通过将 obj 赋值给 result,自动进行了拆箱操作。编译器提取了 obj 对象中的基本类型值,将其赋给 result 变量。
    • 12.

      上述神奇代码(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?

      首先检查输入的整数是否在缓存范围内(即 -128127),如果是的话,它会返回缓存中的对象,否则它会创建一个新的Integer对象

标签:初始化,obj,变量,对象,动脑,equals,动手,MyClass
From: https://www.cnblogs.com/wanbeibei/p/17738338.html

相关文章

  • 9.29 动手动脑
    一、因为构造函数仅有有参构造。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。二、静态初始化块只执行一次。创建子类型的对象时,也会导致父类型的静态初始化块的执行。三、类的静态方法不能直接访问实例的成员,它只能访问同类的静态成员。访问实例的成员......
  • 2023.09.26 动手动脑
    Java的类在构造时会提供一个无参的构造方法,如果已存在用户已经自定义的构造方法,则原有的无参构造方法将无法调用,只能调用自己定义的构造方法。静态初始化的执行顺序:classRoot{static{System.out.println("Root的静态初始化块");}{Sys......
  • 2023年9月28日(动手动脑)
    PublicclassTese{pulicstaticvoifmain(String[]args){Fooobj1=newFoo();}classFoo{intvalue;publicFoo(intinitValue){value=initValue;}}}以上代码在编译时会出现错误,原因是因为如果类提供了一个自定义的构造方法,将导致系统不再提高默认构造方法。而对......
  • 2023.9.28动手动脑
    1.此代码有什么问题 建造构造类的构造函数,再调用时需要输入传入参数,不能再调用原始类的默认构造。2.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?在静态方法中访问类的实例成员(非静态字段或方法),需要通过实例化类对......
  • 动手分析SQL Server中死锁形成原因
    摘要上次在《动手分析SQLServer中的事务中使用的锁》一文中分析了事务中是如何使用锁,对于insert、update和select中使用的锁以实例的方式进行了初步分析,不过日常使用的时候都是很多事务同时执行,有时候难免会遇到死锁和阻塞的问题,近期在生产环境就遇到了一些死锁方面的问题,本文计......
  • 动手学深度学习_3 线性神经网络
    summerpocket_久岛鸥我将会跨越七大洋,将我的爱意带到你的身边线性回归基本概念这里的price泛化后就是我们的y,即标签label这里的area,age泛化后就是我们的X,即特征features当L(W,b)能够通过直接求导得到W与b,那么我们称之W与b有解析解(因为L(W,b)是一个凸函数,当求导后令导......
  • 2023/9/26 动手动脑
    自己构造函数传入参数,在用该类时用传入参数静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?classMyClass{privateintnumber;//实例字段publicstaticvoidmain(String[]args){MyClassmyOb......
  • 9.27日Java动手动脑练习
    1publicclassMain{2publicstaticvoidmain(String[]args){3Fooobj1=newFoo();4Fooobj2=newFoo();5System.out.println(obj1==obj2);6}7staticclassFoo{8Foo(){9}10int......
  • Java动手动脑
    动手动脑Ⅰ程序为什么出错:因为构造函数仅有有参构造。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。 试验publicclassMain{publicstaticvoidmain(String[]args){dn=newd();System.out.println(n.t);n=newd......
  • 动手动脑
    1.     2.  3. 把类叠加写了把Foo写在了Test里4.  publicInitializeBlockClass(){}说了算 我认为这个是看初始化的时候参数的个数和类型,调用相应的函数,在两者都没有的前提下才会调用{}模块;5.   总结:首先执行父类的静态块,然后执行子......