• 类与对象


    课后作业1:

    源代码:

    public class NumberObjects {

            public static void main(String[] args) {

            Number n1=new Number();

            Number n2=new Number();

            System.out.println("你已经创建了"+Number.count+"对象");

            }

    }

    class Number

    {

             static int count;

             public Number()

                 {

                     count++;

                 }

             int  GetCount()

                {

                    return count;

                }

    }

    运行结果截图:

     

    *思考1

     早期我们经常这样定义变量

      int value=100;

      前面的示例中这样定义变量

      MyClass obj = new MyClass();

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

    不一样。前面只定义一个变量,后者定义的对象变量。

    *思考2:

     

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

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

     

    运行结果:flase

    原因:当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等

    当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

    引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

    *动手动脑:

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

     

    构造函数未定义。new Foo()缺少参数

    *“自找麻烦”:

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

    如果父类有静态成员赋值或静态初始化块,执行静态成员赋值和静态初始化块。如果类有静态成员赋值或静态初始化块,执行静态成员赋值和静态初始化块将类的成员赋予初值。如果构造函数中年存在this()调用则执行。

    *进行试验:

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

     

    运行结果:100

              300

    规律:所有类的变量都默认初始化null,数字类的原始数据类型默认初始化为0。

    执行类的成员定义的默认值或类的初始化块,到底执行哪个要看哪一个排在前面。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

    *动手动脑:

    当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

    请自行编写示例代码验证以上结论。

    class GrangFather

    {

    static

    {

    System.out.println("GrangFather的静态初始化块");

    }

    }

    class Father extends GrangFather

    {

        static 

        {

         System.out.println("Father的静态初始化块");

        }

    }

    class Son extends Father

    {

    static 

        {

         System.out.println("Son的静态初始化块");

        }

    }

    public class JiCheng {

    public static void main(String[] args) {

    new Son();

    }

    }

     

    *动手动脑:

    请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

     

    1.静态初始化块只执行一次。

    2.创建子类型的对象时,也会导致父类型的静态初始化块的执行。

    一个有趣的问题:

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

    *“神器代码”

    public static void main(String[]args){

      Integer i1=100;

      Integer j1=100;

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

      Integer j2=129;

      Integer j2=129;

    System.out.println(j2==j2);  //flase

    }

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

    调用了java.lang.String类,包含了字符串的值和实现比较特殊,可以不适用构造方法,就可以直接获得一个字符串对象。

    *出问题啦!

     package jix

    public class Hello

    {

    public static void main(String[] args) 

    {

    System.out.println("Hello World!");

    }

    }

    运行结果:错误:找不到或无法加载主类 jxlPacakge.Hello

    *动手练习

    不使用Eclipse,直接使用命令行运行Test1.java,Test2.Java,Test3.Java

     

  • 相关阅读:
    (备忘)解决用Xftp向CentOS7 传文件速度慢的问题
    CentOS上使用ntfs-3g挂载NTFS分区
    tomcat运行一段时间出“org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header”
    JQuery EasyUI treegrid展开与折叠,以及数据加载两次的问题
    goland 激活码
    golang 之xorm
    golang 之 go module
    golang 之单元测试
    golang 之反射
    golang 之sync &并发安全锁
  • 原文地址:https://www.cnblogs.com/java-test/p/4962624.html
Copyright © 2020-2023  润新知