Java类和对象课后作业

1.

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;
}

截图:

总结:

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

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

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

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

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

3.

class InitializeBlockClass
{
      {field=200;}
      public int field=100;
      public InitializeBlockClass(int value){this.field=value;}
      public InitializeBlockClass(){}
}
public class test
{
          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);
           }
  }

截图:

100

300

总结规律:

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

(2)执行类的构造函数

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

4.

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

    }
}

结果:

总结:静态初始化块的执行顺序

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

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

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

public class ButtonFactory {
private static ButtonFactory _instance = null;
public static  ButtonFactory getInstance()
{
    if(null == _instance)
    _instance = new ButtonFactory();
    return _instance;
}
}

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

public class Objectnumber
{
     public static void  main(String[] args)
    {
      @SuppressWarnings("unused")
      Number n1=new Number();
      @SuppressWarnings("unused")
      Number n2=new Number();
      @SuppressWarnings("unused")
      Number n3=new Number();
      System.out.println("目前你已经创建了"+Number.count+"个对象");
    }
}

class Number
{
   static int count;
   public Number()
   {count++;}
    int GetCount(){return count;}
}

时间: 2024-10-25 03:19:13

Java类和对象课后作业的相关文章

l类与对象课后作业

java 的初始化规律 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”. 执行类的构造函数. 类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行.因此,适合于封装那些“对象创建时必须执行的代码” 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行. 请自行编写示例代码验证以上结论. public class InitializeBlockDemo { /**   * @param args   */ public static vo

类与对象课后作业

1.查询"你已经创建了多少个对象?" 源代码: 1 public class How { 2 public static void main(String[] args) { 3 a1 b1 = new a1(); 4 a1 b2 = new a1(); 5 a1 b3 = new a1(); 6 //我已经创建了3个对象,接下来调用a1类的静态变量查询创建了多少对象 7 System.out.println("我已经创建的对象个数为: "+a1.value); 8

类和对象课后作业

  1. 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.fi

类与对象课后作业第一题

public class Test { private int id; private String name; private static long count; private final static ThreadLocal tl=new ThreadLocal(); public Test() { super(); count++; tl.set(count); } public long getCount(){ return (Long)tl.get(); } public stat

Java类与对象的课后练习

Java类与对象的课后练习编程题(java2实用教程P111) 这章内容自学完了,在做教材课后其他练习题的时候(只要自己仔细)都没啥问题,但在做最后一道上机编程题的时候问题出现了,在阅读题目的时候自己能感受到的是这道题不难(的确也不难),我也很快写了出来,但运行程序的时候,结果一直不正确,最后改来改去都不对,思路是对的,分步执行的时候也感觉是有个地方出了问题但就是揪不出来,最后又把课本的前面的例子反复的看对比,最后找到了问题: System.out.println("cpu的速度:"+

java类,对象,方法

1,类和对象   在面向对象的概念当中,类(class)是既包括数据又包括作用于数据的一组操作的封装体.类的数据称为成员变量,类对数据的操作称为成员方法.成员变量反映类的状态和特征,成员方法反映类的行为和能力.类的成员变量和方法统称为类的成员.   对象(Object)是类的实例(instance).对象是动态的,拥有生命周期,都会经历一个从创建.运行到消亡的过程.对象与类的关系就像变量与数据类型一样.   类声明 { 修饰符 } class <Classname> { extends <

java类与对象的区别

java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间的区别. 首先讲讲class和object的区别,其实就是一句话:object是所有class的父类,所有class类都默认继承object. java中类是对一类"事物"的属性和行为一种抽象,比如人类就可以定义为一个Person类: public class Person { public int age;//年龄 public String name;//姓名 public i

有关java类、对象初始化的话题,从一道面试题切入

最近在整理东西时,刚好碰到以前看的一道有关java类.对象初始化相关题目,觉得答案并不是非常好(记忆点比较差,不是很连贯).加上刚好复习完类加载全过程的五个阶段(加载-验证-准备-解析-初始化),所以如果周志明大大诚不我欺的话,无论是类加载过程.还是实例化过程的顺序我都已经了然于心了才对. 一道面试题 标题:2015携程JAVA工程师笔试题(基础却又没多少人做对的面向对象面试题) 地址:https://zhuanlan.zhihu.com/p/25746159 该题代码如下: public cl

JAVA类与对象作业——动手动脑以及课后实验性问题

一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; } } public class Test2 { public static void main(String[] args) { Foo obj1 = new Foo(2); } } 2.截图 3.总结 如果一个类提供自定义的构造方法,导致系统不再提供默认构造方法. 二: 1.源代码 //mao2