课堂作业及 动手动脑问题整理

课堂作业一

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

程序:

package com;

public class Duixiang {

public static void main(String[] args){

duixiang a=new duixiang();

a.out();

duixiang b=new duixiang();

b.out();

}

}

class duixiang{

static int n=0;

duixiang(){

n++;

}

public void out(){

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

}

}

结果截图:

课堂问题整理

一、进行试验:

运行结果:100   300

Java字段初始化的规律:所有类的变量都默认初始化为null,数字类的原始数据类型默认初始化为0,boolean默认初始化为false;进行初始化的地方有初始化块和构造函数,初始化快分为静态初始化块和实例初始化块。执行类成员定义时指定的默认值或类的初始化块,到底执行哪个要看哪个“排在前面”。

二、动手动脑:

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

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

程序:

package com;

public class Animal {

public boolean live=true;

public String skin="";

public void eat(){

System.out.println("动物需要吃食物");

}

public void move(){

System.out.println("动物会运动");

}

}

class Bird extends Animal{

public String skin="羽毛";

public void move(){

System.out.println("鸟会飞");

}

}

class Zoo{

public static void main(String[] args){

Bird bird=new Bird();

bird.eat();

bird.move();

System.out.println("鸟有:"+bird.skin);

}

}

截图:

三、动手动脑:

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

结果截图:

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

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

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

四、一个有趣的问题:

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

请编写代码验证你的想法。

程序:

package com;

public class ButtonFactory {

private static ButtonFactory _instance=null;

public static ButtonFactory getInstance(){

if(null==_instance)

_instance=new ButtonFactory();

return _instance;

}

}

时间: 2024-08-03 15:43:46

课堂作业及 动手动脑问题整理的相关文章

课后作业和动手动脑(字符串)

动手动脑1: (1)       在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象. (2)       编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”).这种优化工作由Java编译器自动完成. (3)       当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象 动手动脑2: equals所在位置: 在Object类当中,而Object是

课后作业及动手动脑

动手动脑 请查看String.equals()方法的实现代码,注意学习其实现方法. public class StringEquals { public static void main(String[] args) { String s1=new String("Hello"); String s2=new String("Hello"); System.out.println(s1==s2); System.out.println(s1.equals(s2));

JAVA作业之动手动脑

1.枚举类型是引用类型,但例子输出结果引用的不是同一个类型.枚举类型可以有自己的属性(参数)和方法,枚举类型可以以独立的文件存在. 2.第一个"X+Y="+X+Y的运行结果是默认为先加一个字符再加一个字符,第二个X+Y+"=X+Y"的运行结果是默认先加数字再加字符. 3.数值的二进制表示: 原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小. 反码::正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. 补

课后作业和动手动脑

一,运行TestInherits.java 通过super调用基类构造方法,必是子类构造方法中的第一个语句. 二.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 构造函数的主要作用:构造函数是类的一个特殊方法,这个方法用来生成实例时由系统自动调用程序员无法直接调用.构造函数方法名同类名相同且参数为空.子类继承父类后默认继承父类的构造函数,即:子类存在隐含方法:super(),如果子类重写构造函数则子类也隐含调用super(). 三.运行Address.j

动手动脑课堂作业7---------

动手动脑1 CatchWho.java运行结果: CatchWho2.java运行结果: EmbedeFinally.java运行结果: finally语句块一定会执行吗? SystemExitAndFinally.java运行结果: 只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行.如果在try语句块之前返回(return)或者抛出异常,try对应的finally语句块就不会执行. 动手动脑2 如何跟踪异常的传播路径? 当程序中出现异常时,JVM

Java动手动脑第四讲课堂作业

动手动脑1 完全"手写代码实现"随机数生成 纯随机数发生器 Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复. 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int LEFT = 40; private static fi

动手动脑(课堂作业05)

1,思考 class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent2 extends Grandparent { publi

第七讲 数组动手动脑和课后作业

[动手动脑1] 数据作为方法参数示例代码 int[] arr= new int[ 24 ]; -- modifyArray( arr ); 阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. // PassArray.java // Passing arrays and individual array elements to methods public class PassArray { public static void ma

异常处理---动手动脑及课后作业

动手动脑1:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 源码: import javax.swing.*; class AboutException { public static void main(String[] a) { int i=1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new Exception