• JAVA类和对象课后作业


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

    代码:

    //显示类

    //YiMingLai 2016.10.19

    public class lei {

    /**
    * @param args
    */

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    lei1 a=new lei1();
    lei1 b=new lei1();
    b.out();
    }
    }

    class lei1{
    static int n=0;

    lei1(){

    n++;

    }

    public void out(){

    System.out.println("你已经创建了"+n+"个对象!");

    }
    }

     

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

    public class test {

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Foo obj1=new Foo();
    Foo onj2=new Foo();
    System.out.println(obj1==obj2);

    }

    }

    class Foo{
    int value=100;
    }

    结果错误,输出不出来。

    原因:

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

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

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

     

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

    public class test {

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Foo obj1=new Foo();
    }

    }

    class Foo{
    int value;
    public Foo(int intvalue){
    value=intvalue;
    }
    }

    结论:

    如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

    4.运行代码

    public class test {

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    InitializeBlockClass obj=new InitializeBlockClass();
    System.out.println(obj.field);//?

    obj=new InitializeBlockClass(300);
    System.out.println(obj.field);
    }

    }

    class InitializeBlockClass{
    {field=200;}
    public int field=100;
    public InitializeBlockClass(int value){this.field=value;}
    public InitializeBlockClass(){}
    }

    结论:

    执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 执行类的构造函数。

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

    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.上述神奇代码(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?

    结论:因为它们调用的Interger类的方法不同,所以结果不同

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

    class Example

     {  

            public static void display()

            {

                 System.out.println("类的方法");

             }

     public void displayOne()

     {

            System.out.println("对象的方法");

     }

      public static void main(String[] args) 

    {

               Example.display();

               Example e=new Example();

               e.displayOne();   

               e.display();

     }

    }

  • 相关阅读:
    day12_字符连接单引号转意字符
    day12_存储过程说明
    day12_PLSQL编程--存储过程---统一发布动态属性管理
    linux关闭celinux服务
    day11__表管理
    day11_分区表------子分区的母模板(11g)
    day11_分区表------子分区的母模板(10g)
    day11_分区表——分区表常用维护
    smartforms 中的currquan单位处理
    当SVN服务器端IP地址发生变化时,客户端重新定位
  • 原文地址:https://www.cnblogs.com/ming123/p/5982644.html
Copyright © 2020-2023  润新知