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

动手动脑

时间:2023-10-01 15:11:39浏览次数:31  
标签:初始化 动脑 System class 动手 println public out

piblic class Text{
    public static void main(String []args){
        Foo obj1==new Foo();
        }
}
class Foo{
    int value;
    public Foo(int initValue){
        value=initValue;
    }
}

  以下代码为何无法通过编译?哪儿出错了?

首先是我们自己在类Foo里定义了一个构造方法,而这个构造方法是带参数的;如果我们不定义,电脑会自动定义一个无参数的,那在主函数里就可以那么写。

public class InitializeBlockDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		InitializeBlockClass obj=new InitializeBlockClass();
		System.out.println(obj.field);
		
		obj=new InitializeBlockClass(300);
		System.out.println(obj.field);
	}

}

class InitializeBlockClass{
	//下面这句在初始化块之前与之后,会影响到field字段的初始值
	//public int field=100;
	
	{
	    field=200;
	}
	public int field=100;
	public InitializeBlockClass(int value){
		this.field=value;
	}
	public InitializeBlockClass(){
		
	}
}

  下面是结果:

  • 在创建对象时,成员变量会被初始化。
  • 实例化对象的初始化顺序是:静态成员变量初始化 → 实例变量初始化 → 构造方法初始化。
  • 如果成员变量没有被赋予初始值,则会使用默认值进行初始化。
    class Root
    {
    	static
    	{
    		System.out.println("Root的静态初始化块");
    	}
    	{
    		System.out.println("Root的普通初始化块");
    	}
    	public Root()
    	{
    		System.out.println("Root的无参数的构造器");
    	}
    }
    class Mid extends Root
    {
    	static
    	{
    		System.out.println("Mid的静态初始化块");
    	}
    	{
    		System.out.println("Mid的普通初始化块");
    	}
    	public Mid()
    	{
    		System.out.println("Mid的无参数的构造器");
    	}
    	public Mid(String msg)
    	{
    		//通过this调用同一类中重载的构造器
    		this();
    		System.out.println("Mid的带参数构造器,其参数值:" + msg);
    	}
    }
    class Leaf extends Mid
    {
    	static
    	{
    		System.out.println("Leaf的静态初始化块");
    	}
    	{
    		System.out.println("Leaf的普通初始化块");
    	}	
    	public Leaf()
    	{
    		//通过super调用父类中有一个字符串参数的构造器
    		super("Java初始化顺序演示");
    		System.out.println("执行Leaf的构造器");
    	}
    
    }
    
    public class TestStaticInitializeBlock
    {
    	public static void main(String[] args) 
    	{
    		new Leaf();
    		
    
    	}
    }
    
  • 静态初始化块的执行顺序与它们在代码中的出现顺序一致。
  • 静态初始化块在类加载时只会执行一次,且在静态成员变量初始化之后执行。
    public class MyClass {
        private int count;
    
        public void instanceMethod() {
            // 非静态方法中可以直接访问实例成员
            count = 10;
            staticMethod(this); // 将实例对象作为参数传递给静态方法
        }
    
        public static void staticMethod(MyClass obj) {
            // 静态方法中通过参数访问实例成员
            int count = obj.count;
            // ...
        }
    }
    

      通过参数传递实例对象。

  • public class MyClass {
        private int count;
    
        public static void staticMethod() {
            MyClass obj = new MyClass();
            obj.count = 10; // 访问实例成员
        }
    }
    

      通过创建实例对象。

 

标签:初始化,动脑,System,class,动手,println,public,out
From: https://www.cnblogs.com/2022-yang/p/17738856.html

相关文章

  • 动手动脑
    1.早期经常这样定义变量intvalue=100;前面的示例中这样定义变量MyClassobj=newMyClass();这两种方式定义的变量是一样的吗?不,这两种方式定义的变量并不相同。在第一个例子中,intvalue=100;是在Java中定义一个名为value的整数类型变量,并将其初始化为100。这是基本数据......
  • 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......