类与对象的作业

(1)请依据代码的输出结果,自行总结Java字段初始化的规律

源代码: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(){

}

}

实验截图:

规律:java字段的初始化分为静态初始化和实例的初始化,而静态的初始化就是我们所看到的static所修饰的地方。实例的初始化则没有一些关键字了。

(2)请运行TestStaticInitializeBlock.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();

}

}

实验截图

规律:首先执行父类中的静态初始化块,然后接着去执行子类中的静态初始化块。

(3)静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员

源代码:

import javax.swing.JOptionPane;

public class Test

 

{

    static int s;

    int total_employees=0;

         public static void display()

         {       

                   System.out.println("工人的总数为:"+s);

         }

        

         public int input()

         {

                   String str=JOptionPane.showInputDialog("输入工人的总数:");        

                total_employees=Integer.parseInt(str);;

                   return total_employees;

         }

        

         public static void main(String args[])

         {

                   Test t = new Test();

                   s = t.input();

                   t.display();

         }

}

结论:在静态方法中访问类的实例成员:需要创建对象,再通过对象进行调用成员函数访问实例成员

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

 

源代码:

public class Test {

static long count=0;

static ThreadLocal Th=new ThreadLocal();

public Test() {

count++;

Th.set(count);

}

public long getCount(){

return (Long)Th.get();

}

public static void main(String[] args) {

for (int i = 0; i < 4; i++) {

Test t=new Test();

System.out.println("一共创建了多少个对象");

System.out.println(t.getCount());

}

}

}

实验截图:

时间: 2024-10-11 21:46:47

类与对象的作业的相关文章

l类与对象课后作业

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

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; } 截图: 总结: 当"=="施加于原始数据类

类与对象课后作业

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

论团队(类与对象邮箱作业再次提交)

大家众所周知,一个项目的完成需要团队的努力,团队是至少以三个人为规模的.首先一个人算不上团队,只能称之为个体,两个人则相互支持,三个人便是团队,这样的团队有其基本的特性,主从监督和责任.当然并不是说一个人不能成功,有很多并非团队成功的案例,例如王江民先生一个人创造出kv100,kv200反病毒软件.两个人相互支撑也是可以成功的例如:周辉和刘杰先生创造出av95反病毒软件.但现在的项目一般都需要团队共同完成.既然是团队就需要领导,这个领导不需要像程咬金一样的牛人,但必须像李离一样具有死士的精神,项

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

JAVA作业 04 类与对象

一.动手动脑 1)题目要求:验证ClassAndObjectTest.java(使用自定义类) 2)源代码: public class ClassAndObjectTest { public static void main(String[] args) { //创建类的实例,定义一个对象变量引用这一实例 MyClass obj = new MyClass(); //通过对象变量调用类的公有方法 obj.myMethod("Hello"); //给属性赋值 obj.setValue(1

java 作业04 类和对象

思考问题1 早期我们经常这样定义变量 int value=100: 前面的示例中这样定义变量  MyClass.obj=new MyClass(); 这两种方式定义的变量是一样的吗? 不一样.前者定义的是原始数据类型变量,在定义原始数据变量时就为变量开辟了空间:后者是定义了对象的变量,并用构造方法为其开辟内存空间. 思考问题2: 对原始数据类型,可以直接使用"=="来判断两个变量的值是否相等. 对象变量也可以使用"=="来判断两变量的值是否相等吗? 不可以. 当&q