第五周动手动脑

复制代码
package text;

public class text {
    public static void main(String[] args) {
        Foo obj1=new Foo();
    }
}
class Foo
{
    int value;
    public Foo(int initValue)
    {
        value =initValue;
    }
}
复制代码

该代码会报错,因为JAVA系统中如果自己定义了一个构造函数,那么系统就不会再提供一个无参的空构造函数

 

复制代码
package text;


public class text1 {
    
    {
        field=200;
    }
    public int field=100;
    
    public text1(int value)
    {
        this.field=value;
    }
    public text1()
    {
        
    }
    public static void main(String[] args) {
        text1 obj=new text1();
        System.out.println(obj.field);
        obj=new text1(300);
        System.out.println(obj.field);
    }
    
        
        
        
        
        
}
复制代码

该代码可以看出构造函数在初始化上优先级比代码块高

 

复制代码
package shangke.diwuzhou;
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();
        

    }
}
复制代码

该代码可以看出执行优先级是静态代码块>普通代码块>构造函数

还有就是父类函数比子类函数的构造函数执行优先级高

 

复制代码
package text;
public class text2 {
    int num=100;
    static public int fangfa(text2 str)
    {
        str.num=666;
        System.out.println(str.num);
        return str.num;
    }
    public static void main(String[] args) {
        text2 sta=new text2();
        text2.fangfa(sta);
    }
}
复制代码

我们知道静态函数只能访问静态成员,但是如果我们想通过静态函数访问普通成员可以在静态函数中设置参数将对象传进去,从而访问普通成员。

 

复制代码
package text;

public class text3 {

    public static void main(String[] args) {
        Integer i1=127;
        Integer j1=127;
        System.out.println(i1==j1);
        Integer i2=128;
        Integer j2=128;
        System.out.println(i2==j2);
        
    }
}
复制代码

 

该代码的结果是true 和false

出现该结果的原因是int类型的范围是-128到127,Integer在-128到127的范围内用的是int可以所是引用类型,超过127的Integer需要new一个新地址所以地址不一样,所以“==”比较的是地址所以是false。

 

posted @   yizhixiaozhu  阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示