当前位置: 首页 > news >正文

第十五天

public class Test {
public static void main(String[] args) {
Foo obj1=new Foo();
Foo obj2=new Foo();
System.out.println(obj1obj2);//?
}
}
class Foo{
int value=100;
}
在 Java 中,
用于比较对象的引用地址。这里obj1和obj2是通过两次new Foo()创建的对象,它们在内存中是两个独立的实例,具有不同的引用地址。因此,obj1==obj2的结果为false。
2.

class MyTestClass {
public int Value;
public boolean equals(MyTestClass obj) {
return obj.Value == this.Value;
}
public MyTestClass(int initValue) {
Value = initValue;
}
}
该方法(构造方法)的 “与众不同之处”
名称特殊:方法名与类名(MyTestClass)完全相同,这是构造方法的标志性特征。
无返回值声明:不同于普通方法需要声明返回值类型(如void、int等),构造方法没有返回值声明。
作用特殊:主要用于在创建对象时初始化对象的状态(如给Value字段赋值),是对象创建过程中自动调用的特殊方法。
调用时机特殊:在使用new关键字创建对象时自动调用,普通方法需通过对象显式调用。
3.

以下代码为何无法通过编译?
public class Test {
public static void main(String[] args) {
Foo obj1=new Foo();
}
}
class Foo{
int value;
public Foo(int initValue) {
value=initValue;
}
}
错误点:Foo类是非静态内部类,非静态内部类依赖外部类对象存在,不能在静态方法(如main方法)中直接创建其对象;且Foo类只定义了带参数的构造器public Foo(int initValue),创建对象时未传入参数。
解决方法(二选一):
方法一:将Foo类改为静态内部类,即在class Foo前添加static关键字,变为static class Foo,同时创建对象时传入参数,如Foo obj1=new Foo(10);。
方法二:将Foo类独立为一个外部类,不再作为Test类的内部类,然后在Test类中正常导入并创建带参数的Foo对象。
4.

Java字块初始化规律:默认初始化:字段在创建对象时,会先进行默认初始化(如int类型默认值为0)。
实例初始化块:如果类中定义了实例初始化块({}包裹的代码块),会在默认初始化后、构造器执行前执行,用于对字段进行初始化。
构造器初始化:构造器是最后执行的初始化环节,会覆盖之前的初始化结果(如上述有参构造器中对field的赋值)。
简单来说,初始化顺序为:默认初始化 → 实例初始化块 → 构造器,后续环节的初始化操作会覆盖之前的结果。

在静态方法中访问类的实例成员
public class Demo {
// 实例字段
private int instanceField = 10;

// 实例方法
public void instanceMethod() {System.out.println("这是实例方法");
}// 静态方法
public static void staticMethod() {// 先创建Demo类的实例对象Demo demo = new Demo();// 通过实例对象访问实例字段System.out.println("访问实例字段:" + demo.instanceField);// 通过实例对象访问实例方法demo.instanceMethod();
}public static void main(String[] args) {// 调用静态方法验证staticMethod();
}

}
静态方法属于类,在类加载时就存在,此时可能还没有类的实例对象;而实例成员属于对象,必须通过具体的对象来访问。
因此,在静态方法中先创建类的实例对象,就能借助该对象来访问实例字段和实例方法了。

为何一个输出true,一个输出false
public static void main(String[] args){
Integer i1=100;
Integer j1=100;
System.out.println(i1==j1); //true

Integer i2=129;
Integer j2=129;
System.out.println(i2==j2); //false

}
Java 对Integer类型在[-128, 127]范围内的数值进行了缓存。当创建该范围内的Integer对象时,会直接从缓存中获取已有对象。
对于i1=100和j1=100,因为 100 在[-128, 127]范围内,所以i1和j1引用的是同一个缓存对象,使用比较(比较对象引用)时结果为true。
对于i2=129和j2=129,129 超出了[-128, 127]的缓存范围,此时会分别创建新的Integer对象,i2和j2引用的是不同的对象,所以
比较结果为false。

http://www.hskmm.com/?act=detail&tid=33319

相关文章:

  • 软件工程学习日志2025.10.17
  • 天黑了,睡觉
  • 升鲜宝生鲜配送供应链管理系统---- 门店收银 POS 离线工作设计文档(支持线上线下一体化)---02
  • 2025.10.16NOIP模拟
  • Python 基于Python开发的数据库同步检测工具
  • 当AI学会进化:荣耀与用户的“共生式成长”新范式
  • VSCode的下载安装以及配置
  • 2025年终极公众号排版神器排行榜 最新案例研究权威测评
  • NAS安装远程协作神器twake
  • 把三门问题做成了"游戏"
  • 下一代CPU驱动高性能计算革新
  • [KaibaMath]1010 关于关于收敛数列有界性的证明
  • 卫星地图匹配定位 - MKT
  • 10.17 —— (VP) 2021icpc沈阳
  • 10.17每日总结
  • 今天宝宝进面了
  • 《大象Thinking in Projects》读书笔记1
  • 20251017
  • MT签名去除签名校验分析
  • uml
  • P3643 [APIO2016] 划艇 分析
  • day016
  • uml九图和数据流图总结
  • UpdateSourceTrigger和Mode的区别
  • NOIP2020 T2
  • Alex-VGG3
  • 第二章日志分析-redis应急响应
  • 第一章 应急响应- Linux入侵排查
  • 浏览器多开的方法
  • 10月17号