zoukankan      html  css  js  c++  java
  • java课堂作业3 动手动脑

    第一题

    测试一下代码查看输出结果


    public class InitializeBlockDemo {

    /**
    * @param args
    */
    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(){

    }
    }

    结果

    public int field=100;

    在上边结果为200   300

    在下边结果为100 300

    java 字段初始化规律为

    声明一个变量后,最终输出的的结果是最近一次赋值的结果。

    第二题

    运行如下代码总结静态初始化执行顺序


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

    }
    }

    执行顺序

    在初始化中首先执行静态初始化,假如存在继承关系则先初始化父类静态函数,在执行子类静态函数,初始换完毕后。

    执行父类的普通函数和无参构造函数,在执行子类的普通函数和无参构造函数,假如存在有参构造函数,在无参函数执行结束后执行。

    第三题

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

    代码如下


    public class Ceshi {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Jingtai n=new Jingtai();
    n.fangf();

    }

    }
    class Jingtai{
    public int num=1;
    int getNum(){ //用来返回num的值
    return num;
    }
    static void fangf(){
    Jingtai n=new Jingtai();
    System.out.println("静态方法调用成员函数:"+n.getNum());

    }
    }

    可以通过一个方法得到成员函数的值,然后在静态方法中调用即可

    第四题

    执行以下代码

    public class StrangeIntegerBehavior
    {


    public static void main(String[] args)
    {


    Integer i1=100;

    Integer j1=100;

    System.out.println(i1==j1);


    Integer i2=129;

    Integer j2=129;

    System.out.println(i2==j2);

    }


    }

    原因经过javap 对class文件执行并在jdk源文件中发现

    public static Integer valueOf(int i) {

    if (i >= IntegerCache.low && i <= IntegerCache.high)

    return IntegerCache.cache[i + (-IntegerCache.low)];

    return new Integer(i);

    }

    感觉这段代码就是根本所在

    Integer把-128到127的整数都提前实例化了。 

    所以导致输出结果一个是true一个是false

  • 相关阅读:
    【 POJ
    C语言常用数学函数及其用法
    【HDU3065】 病毒侵袭持续中(AC自动机)
    windows版本cloudbase-init流程说明
    Metadata 的概念
    DataSource的设置
    cloud-utils
    cloud-init代码调试方法
    cloud-init简介及组件说明
    使用dib element proliant-tools制作deploy image
  • 原文地址:https://www.cnblogs.com/wys-373/p/7691980.html
Copyright © 2011-2022 走看看