• 03-类与对象动手动脑


    (1)早期我们经常这样定义变量int value=100;前面的示例中这样定义变量 MyClass obj=new MyClass();

    这两种方式定义的变量是一样的吗?

    这两种方式定义的变量不是一样的,第一种方式定义的是普通类成员变量,定义这样的原始类型变量时,

    会马上给其分配内存。第二种定义的是类对象变量时,实际上并没有创建一个对象,此变量=null。

    (2)请输入并运行以下代码,得到什么结果?

    public class Test{
        public static void main(String[] args){
            Foo obj1=new Foo();
            Foo obj2=new Foo();





     
    
    
    
    
            System.out.println(obj1==obj2);
            
            
        }
        
        
        
        
    }
    class Foo{
        int value=100;
    }

    运行结果:

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

    public class Test{

     public static void main(String[] args){

      Foo obj1=new Foo();

     }

    }

    class Foo{

    int value;

     public Foo(int initValue){

        value=initValue;

    }

    }

    原因:如果类提供了一个自定义的构造方法,将导致系统不再提供默认的构造方法。

    (4)使用上页幻灯片中定义的类,以下代码输出结果是什么?

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

    输出结果:

    总结:执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个排在前面。然后执行类的构造函数。

    类的初始化块不接受任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须

    执行的代码”。

    (5)总结静态初始化块的执行顺序

    总结:静态初始化块只执行一次。创建子类型的对象时,也会导致父类型的静态初始化块的执行。其执行顺序为1.父类的

    静态初始块2.子类的静态初始块3.父类的静态初始化块4.子类初始化块。

    (6)在静态方法中访问类的实例成员

    代码:

    public class Exz{
    public static void main(String[] args){
    Exz.td();
    Exz sc = new Exz();
    System.out.println("x="+sc.a);

    }
    int a =5;
    static int b = 6;
    public static void td(){
    System.out.println("实例变量x="+new Exz().a);
    System.out.println("静态变量y="+b);
    }
    }

    运行结果:

    (7)神奇代码

    原因:在通过valueof方法创建Integer对象的时候,如果值在-128-127之间,则返回Integer中已经存在的对象的引用。否则创建一个新的对象。

    当值为100时,会直接从中取已存在的对象,所以输出为false。当值为129时,则分别指向不同的对象,输出为false。

  • 相关阅读:
    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值。
    PowerDesigner 连接数据库,更新数据库;
    Spark Worker启动Driver和Executor工作流程
    获取spark-submit --files的文件内容
    JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别(转)
    在Java应用中通过SparkLauncher启动Spark任务
    通过thriftserver的beeline/jdbc等方式连接到SparkSQL
    Spark:java.net.BindException: Address already in use: Service 'SparkUI' failed after 16 retries!
    Spark Sql之ThriftServer和Beeline的使用
    Spark SQL读取Oracle的number类型的数据时精度丢失问题
  • 原文地址:https://www.cnblogs.com/lwq666/p/7695811.html
Copyright © 2020-2023  润新知