• 第五周动手动脑


    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。

  • 相关阅读:
    jQuery Colorpicker Spectrum api 中文 文档 属性 事件 方法
    java使用dbutils工具类实现小程序 管家婆记账软件
    java实现服务端开启多线程处理客户端的上传图片请求
    java 基于tcp客户端服务端发送接收数据
    java基于udp实现键盘录入聊天
    java实现udp发送端和接收端
    java通过读取本地文件获取反射方法参数,执行对象方法
    java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束
    Java反射获取类对象的三种方式
    java使用DBCP连接池创建工具类
  • 原文地址:https://www.cnblogs.com/yizhixiaozhu/p/11693820.html
Copyright © 2020-2023  润新知