java - 为什么java程序中的这个输出打印值300
问题描述
我有以下java程序,
class A{
int a=100;
A(int i){
}
{
a=300;
}
void printA(){
System.out.println("a : "+a);
}
}
class Demo{
public static void main(String args[]){
A a1=new A(200);
a1.printA(); //300
}
}
但我不明白为什么 main 方法 'a1.printA(); ' 作为 300 你能解释一下吗?
解决方案
class A{
A(int i){
}
int a=100;
{
a=300;
}
void printA(){
System.out.println("a : "+a);
}
}
class Demo{
public static void main(String args[]){
A a1=new A(200);
a1.printA(); //300
}
}
好的,您为该实例变量设置了两次值:
int a = 100;
这是第一个执行的。所以,这就是它开始的地方。
然后,你初始化你的类,所以你的初始化块将被执行,其中包含:
a=300;
这将覆盖以前的值。
您还将参数传递给您的构造函数,但您不使用它。所以这不会改变 a 的值。
推荐阅读
- asp.net-core - .NET 6 RC1 和 VS2022 预览版中的 Blazor wasm 托管应用程序 4 返回未找到
- macos - 在设置中更改磁盘映像位置后,Docker 容器和映像在 OSX 上不再可见
- python - 将屏幕过渡方向应用于扩展面板和屏幕 kivy/kivymd 内的元素卡
- gitlab - Gitlab - 从问题创建分支和合并请求
- sqlite - 这两个 SQLite 查询会产生相同的结果吗?
- variables - 如何将 ColdFusion cfoutput 查询行#/ID 传递给另一个 CFM 或函数?
- ios - 使用苹果登录在模拟器中使用 swift 不起作用
- macos - 需要在mac上安装Watchman 4.9.0版本
- java - 如何阻止我的代码重复菜单打印?
- mysql - SQL:如何按计数除列?