zoukankan      html  css  js  c++  java
  • Java第三章整理

    1.不一样。前者为“原始数据类型”,诸如int,float之类的变量;后者为“引用类型”变量,“引用”一个对象的变量称为“引用类型”的变量,有时又简称为“对象变量”。从变量与内存分配上讲,当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null。定义一个原始类型的变量时,会马上给其分配内存。从变量的初始化上讲,在定义原始变量时,Java要求必须显式初始化变量;而对象变量的初始化:对象变量如果不引用一个真实的对象,则必须声明为null。

    2.对象变量也可以使用“==”判断两变量值是否相等吗?

    public class T {
    public static void main (String[] args){
    Foo obj1=new Foo();
    Foo obj2=new Foo();
    System.out.println(obj1==obj2);
    }
    }
    class Foo{
    int value=100;
    }

    public class T {
    public static void main (String[] args){
    Foo obj1=new Foo();
    Foo obj2=new Foo();
    System.out.println(obj1.value==obj2.value);
    }
    }
    class Foo{
    int value=100;
    }

    当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等 当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。 引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同

    3.如何比较两个对象的内容是否一样?

    两个对象的“内容”,其实是指它们在某一时刻的所有字段的值,“内容相等”,其实是就“对应字段值”一致。

    在Java中要比对两个对象的字段值,可以 “重写(override)”基类的equals()方法

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

    public class Test {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Foo obj1 = new Foo();
    }
    }
    class Foo{
    int value;
    public Foo(int initValue){
    value=initValue;
    }
    }

    如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。所以可以将“Foo obj1 = new Foo();”改为“Foo obj1 = new Foo(4);”。

    5.如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?

     在“public int field = 100;”在“{field=200;}”之前时,是“{field=200;}”说了算;在之后时,是“public int field = 100;”说了算。也就是谁比较靠后就是谁初始化起作用。执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。执行类的构造函数。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

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

    运行结果分为两部分:

    ①“public int field = 100;”在“{field=200;}”之前

    ②“public int field = 100;”在“{field=200;}”之后

    java字段初始化的规律:所有类的变量都默认初始化为null,比如String a; Integer b;数字类的原始数据类型默认初始化为0,比如int a; short b; char c;boolean默认初始化为false;

    7.运行截图如下

    静态初始化块的执行顺序:父类的静态初始化块      子类的静态初始化块   父类的初始化块  父类的构造函数   子类的初始化块   子类的构造函数

    8.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

    public class Text3
    {
     int x = 3;//类的实例变量,初始化值为3
     static int  y = 4;//类的静态变量,初始化值为4
     public static void method()//静态方法
      {   
       System.out.println("实例变量x = " + new Text3().x);//在静态方法中访问类的实例变量需首先进行类的实例化
       System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量
      }
    
     public static void main(String[] args) 
        {
         Text3.method();
         Text3 ex = new Text3();
            System.out.println("x = " + ex.x);
            System.out.println("y = " + ex.y);
        }
    }

    
    

     9.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”

    public class Text1
    {
    public static int num;//静态字段
    public Text1()
    {
    num++;
    System.out.printf("你已经创建了%d个对象 ",num);
    }//构造函数
    public static void main(String[] args)
    {
    num=0;
    Text1 a=new Text1();
    Text1 b=new Text1();
    Text1 c=new Text1();

    }
    }

  • 相关阅读:
    #computer architecture#如何设计一个处理器4
    #computer architecture#如何设计一个处理器3
    #computer architecture#如何设计一个处理器2
    #computer architecture#指令集学习
    seq2seq聊天模型(三)—— attention 模型
    sequence_loss的解释
    seq2seq聊天模型(二)——Scheduled Sampling
    seq2seq聊天模型(一)
    rxjs与vue
    rxjs——subject和Observable的区别
  • 原文地址:https://www.cnblogs.com/as1165/p/7695286.html
Copyright © 2011-2022 走看看