习题解答chapter02

摘要:
实例类的静态属性可以由类和多个对象引用和访问。此属性统计类的对象数:publicstaticchapter{publicstatcclassTest{staticinti=0;Test(){i++;}publicientgetI(){System.out.println;returni;}}publicstaticvoidmain{Testtemp1,temp2,temp3,temp4;temp1=newTest();System.out.println;temp2=temp1;System.out.printl;temp3=temp3;temp4=temp2;Testtemp5=newTest输出结果:第一temp1:1第一temp2:1第二temp3:2第二temp 4:2第三temp5:3静态代码块:任何方法中不包含的静态代码块都可以在类中使用。

1. 对象与对象引用的区别是什么?

创建案例代码:

      public class Study{
      // 默认构造方法
            public Study{
            }
      }

对象创建操作
Study temp = new Study();
语句解读:

  • 左边的“Study temp”创建了一个Study类引用变量,它存放在栈空间中,储存这指向对象的地址,也就是指向Study对象的对象引用。
  • 右边的“new Study”,是以Study类为模版,在堆空间创建类一个Study的对象。
  • 语句等价与下面分解语句:
      Study temp; // 创建对象引用
      temp = /*将对象引用指向对象*/ new Study(); // 创建对象
  • 一个对象引用可以指向一个对象或者不指向对象;一个对象可以被一个或多个对象引用(同时)引用
      // 一个对象引用指向一个对象
      Study temp;
      temp = new Study();
      // 一个对象引用被创建,但是并不指向任何一个对象
      Study temp;

      // 一个对象被一个对象引用所引用
      Study temp;
      temp = new Study();
      // 一个对象被多个对象引用同时引用
      Study temp1, temp2, temp3;
      temp1 = new Study();
      temp2 = temp1;
      temp3 = temp2;

2. 对象作为参数传递的特点是什么?

对象是引用传递,当对象作为参数传递时,传递的是对象的地址,也就是说并没有创建新的对象。

class IntClass {
      int value;
      }

public class RunIntClass {
    public static void modifyValue(IntClass s, int val) {// s=a,多个对象引用指向一个对象
        s.value = val;
    }
//上述结束后,s随着栈空间而被释放,但是value已经被改变且存储在堆空间,并且a依旧指向对象空间
    public static void main(String args[]) {
        IntClass a = new IntClass();
        modifyValue(a, 8); // 将a传递给s
        System.out.println(a.value); // value不是默认的0,变成了8
    }
}

3. 对象初始化的顺序是什么?

非继承情况下对象初始化顺序

public class Test {
    public static void main(String[] args) {
        new Order();
    }
}
class Order{
    AAA s = new AAA("成员变量");
    static AAA a = new AAA("静态成员变量");
    {
        System.out.println("初始化块");
    }
    static{
        System.out.println("静态初始化块");
    }
     Order(){
        System.out.println("构造方法");
    }

}
class AAA{
    public AAA(String str){
        System.out.println(str);
    }
}

输出结果:
静态成员变量
静态初始化块
成员变量
初始化块
构造方法

结论:非继承情况下实例化一个对象,构造的先后顺序是,静态成员变量>静态初始化块>成员变量>初始化块>构造方法

一般顺序为 先静态,后非静态,先变量,后初始化块,再是构造方法

继承情况下对象初始化顺序

public class Test2 {
    public static void main(String[] args) {
        new Son();
    }
}
class Parent{

    {
        System.out.println("parent中的初始化块");
    }
    static{
        System.out.println("parent中static初始化块");
    }

    public Parent(){
        System.out.println("parent构造方法");
    }
}

class Son extends Parent{
    {
        System.out.println("son中的初始化块");
    }

    static{
        System.out.println("son中的static初始化块");
    }

    public Son(){
        System.out.println("son构造方法");
    }
}

输出结果:
parent中static初始化块
son中的static初始化块
parent中的初始化块
parent构造方法
son中的初始化块
son构造方法

  • 总结:属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:
    1. 父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
    2. 子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
    3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
    4. 执行父类的构造方法。
    5. 子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
    6. 执行子类的构造方法。

4. 类的static字段与非static字段的区别是什么?什么情况下应该使用static修饰符?

静态对象非静态对象
类共同拥有类独立拥有
内存空间上是固定的空间在各个附属类里面分配
先分配静态对象空间继而再对非静态对象分配空间
  • 类中被static修饰的域变量专属于类,并不复制到对象中,也就是说是全局唯一的,任何一次修改都影响到全局。它被保存在类的内存区(堆中)的公共存储单元中,而不是保存在某个对象的内存区。
    例证类的静态属性可以被类、多个对象引用访问,利用此性质对类的对象的个数计数:
public class staticchapter {
    public static class Test {
        static int i = 0;

        Test(){
            i++;
        }

        public int getI(){
            System.out.println(i);
            return i;
        }
    }
    public static void main(String args[]){
        Test temp1, temp2, temp3, temp4;
        temp1 = new Test();
        System.out.println("temp1: " + temp1.getI());

        temp2 = temp1;
        System.out.println("temp2: " + temp2.getI());

        temp3 = temp1;
        temp4 = temp1;
        Test temp5 = new Test();
        System.out.println("temp3: " + temp3.getI());
        System.out.println("temp4: " + temp4.getI());


        temp5 = new Test();
        System.out.println("temp5: " + temp5.getI());

    }
}

输出结果:
第1次
temp1: 1
第1次
temp2: 1
第2次
temp3: 2
第2次
temp4: 2
第3次
temp5: 3

  • 静态代码块:一个类中可以使用不包含在任何方法中的静态代码块。当类被装载时,静态代码块被执行,且被执行一次。静态代码块经常被用来对类中定义的属性进行初始化。

5. Java中final修饰符都有什么作用?

以final修饰类属性,则该属性为常量;如果修饰方法,则方法称为最终方法,在子类当中不能被覆盖,利用这一点可以防止子类修改次方法,保证程序的安全性和正确性。

  1. 可用于修饰:成员变量,非抽象类(不能与abstract同时出现),非抽象的成员方法,以及方法参数;
    2.final方法:不能被子类的方法重写,但可以被继承;
    3.final类:表示该类不能被继承,没有子类;final类中的方法也无法被继承.
    4.final变量:表示常量,只能赋值一次,赋值后不能被修改.final变量必须定义初始化;
    5.final不能用于修饰构造方法;
    6.final参数:只能使用该参数,不能修改该参数的值;

6. Java中float[10]arr,语句正确吗?

不正确,java中数组的声明就像是C++中的定义一个指针,可以初始化,但是不能指定长度。

_7. Java数组元素类型为基本数据类型和引用类型时,有什么不同?

引用数据类型基本数据类型
所有单元初值为null所有单元初值为0
创建时,在栈上存储其引用,对象的具体信息存储在堆创建时,在栈上直接存储

免责声明:文章转载自《习题解答chapter02》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SSHdebian+postfix+dovecot+squirrelmail安装配置笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java之static变量与全局、局部变量的区别

static变量与全局、局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其...

java 添加properties文件读写

import java.io.InputStream; import java.util.Properties; /** * @author guoxiang * */ public class Config { private static Config instance = null; private Propert...

srand函数

srand函数是随机数发生器的初始化函数。  原型:void srand(unsigned seed);  用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,...

[转]天龙八部服务器端-共享内存的设计

一、服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同。区角色数据库可以安装到Machine4,那么一个区有5台物理机器。LoginServer和WorldServer、CharacterDB、BillingServer有连接。WorldServer和各个GameServer有连接。ShareMemory和Chara...

ASP.NET Core 四: Web核心与项目配置,静态内容(文件传输,npm包管理器),中间件,配置(环境配置,启动配置,用户密匙)

概念说明: web核心,本质是一个集成了为Http请求服务功能的承载(Host),一个请求(request)和对应的响应(response)都由HttpContext对象表示。因此就可以在服务的Run程序中对HttpContext的对象做出相关的操作(即对request和response做操作)。 静态内容,这里是关于如何返回静态文件,如html文件,或者...

swiper 绑定点击事件 点击失效处理

1、 问题:react使用swiper3插件实现banner轮播,其中有个banner图有个click点击事件,而其他的是页面跳转。出现了一个问题: 就是向右滑动到该帧时的swiper,点击时未触发react的onClick方法。 参考文章地址:https://www.cnblogs.com/wuhairui/p/9343846.html 错误示范 组件初...