zoukankan      html  css  js  c++  java
  • 动手动脑(课堂作业03)

    1int value=100;MyClass obj = new MyClass();一样吗?

    “引用”一个对象的变量称为“引用类型”的变量,有时又简称为“对象变量”。

    诸如intfloat之类的变量称为“原始数据类型”的变量)

    当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null

    定义一个原始类型的变量时,会马上给其分配内存

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

     

    结果为

    说明无法直接使用==”判断两变量值是否相等。当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等。当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。若将程序中的Foo obj2=new Foo();改为Foo obj2=obj1;则输出结果为true

    若想判断则需要调用equal()函数。例如

     

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

     

    这个错的就比较明显了,自定义Foo类的构造方法是代参数的,而且构造方法没有重载,因此定义Foo类对象时需要加上参数。或者可以进行重载再写上public Foo(){};也可以。

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

    程序如下:

    public class InitializeBlockDemo {

    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(){

    }

    }

    结果为:

    解释:非静态初始化块 定义为{}

    执行时按代码顺序执行。执行时若有静态初始化,先执行静态初始化块再是执行菲静态初始化块。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

    过程:该函数刚开始运行非静态初始化块将field赋予200,之后运用public int初始化赋予filed100将之前的覆盖掉,输出100,之后又调用有参构造函数赋予field300,输出300

    若将 {field=200;}与public int field=100;调换位置则第一次输出为200,第二次不变。

    5,“静态初始化块的执行顺序”。

    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();

    }

    }

     

    ①父类静态初始化块执行

    ②子类静态初始化块执行

    ③父类普通初始化块和无参构造器依次执行

    ④子类普通初始化块和无参构造器依次执行

    ⑤带参构造函数依次执行

    ⑥执行本类普通初始化块和构造器

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

    public class CommandParameter {

    int x=1;

        static int y=2;

        public static void xianshi()

        {

         System.out.println("静态变量"+y);

         System.out.println("非静态变量"+new CommandParameter().x);

        }

        public static void main(String[]args)

        {

         xianshi();

        }

    }

    可以new出对象然后调用变量和方法。

    7,两对整数明明完全一样,为何一个输出true,一个输出false

     

    通过javap反编译得:

     

    声明i1j1等的时候调用的是Integer.valueOf:(I)这个方法而查找jdk源码得:

     

    发现这个方法只能接受-128127之内的数。

  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/chch157/p/7697687.html
Copyright © 2011-2022 走看看