作业一:请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?“

程序源代码;

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+"个对象!");

}

}

程序结果截图:

课后作业二:动手动脑

(1):以下代码为何无法通过编辑,哪出错了?

程序源代码:

public class Test1 {
 public static void main(String[] args){
  Foo obj1=new Foo();
 }

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

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

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

程序源代码:

public class Test2 {
/**
* @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(){}
}

运行结果截图:

结论:

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

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

(3)请运行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();

}
}

程序运行截图:

结论:

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

(4)静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加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();

}

}

(5)上述神奇代码(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?

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

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

程序源代码:

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

结论:

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

java课后作业-5的更多相关文章

  1. java课后作业

    课后作业之字串加密: 设计思想: 1.输入要加密的英文子串str 2.定义num=str的字符串长度 3.将字符串转化为单个字符 4.每个字符+3,向后移3个 5.定义str1,将新得到的每个字符加到 ...

  2. java课后作业总结

    今天的课后作业是做一个查找一段文章中单词出现的概率,统计并 输出出现概率最高的几个单词.拿到题目,老师还是往常一样提醒着我们先分析题目,构建大概的编程思路.程序需要遇到文本文件的输入输出操作,这一直一 ...

  3. java课后作业-4

    一.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private ...

  4. java课后作业7

    9.页实验 下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 答: d=m;和d=c;引起编译错误: 原因: ...

  5. java课后作业6

    一.运行TestInherits.java 结论:通过super调用基类构造方法,必须是子类构造方法中的第一个语句. 二.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不 ...

  6. java课后作业5

    [问题]随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路: 1.申请一个长度为10的数组 2.计算机随机生成10个数,并赋给数组 3. ...

  7. JAVA课后作业01

    一.关于枚举的问题 public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t ...

  8. 10.18号java课后作业代码

    import java.util.*; public class T { public static int a=0; public T() { a++; System.out.println(&qu ...

  9. java 课后作业

    杨辉三角 组合数 public class YH { public static void main(String agrs[]) { int a[5][5],i,j; for(i = 0;i < ...

随机推荐

  1. java设计模式——抽象工程模式

    一. 定义与类型 定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类 类型:创建型 二. 适用场景 客户端不依赖于产品类实例如何备创建,实现等细节 创建一系列相关的产品 ...

  2. MySQL优化器功能开关optimizer_switch

    MySQL 8.0新增特性 use_invisible_indexes:是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on ...

  3. 关于html标签的两种隐藏方式

    做一个文章管理模块 有一个功能是需要根据文章分类来显示内容的标签 刚开始以为很简单 ,手放键盘上就是一顿敲. 如果类型是文章就是没问题  可是另外几种就有问题了 红框的标签一直不出来 后来找了半天然来 ...

  4. 二 python并发编程之多进程-理论

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任 ...

  5. VMWare workstation Pro 14 For Linux key

    VMWare workstation Pro 14 For Linux key: (我使用的Linux 系统是 Ubuntu16.04, 64位 ) 镜像是官方网址下载的,你也可以自己去官方网址下载: ...

  6. KMP的正确使用法_x新疆网络赛Query on a string

    Query on a string 题意,给定一个大字符串,给定一个小模式串,定义 两种不同的任务模式,分别是查询和更改: 查询对应区间内,有多少个匹配到位的数字: 修改某一位的某一个字母. 于是直觉 ...

  7. 笔记-python-standard library-9.6 random

    笔记-python-standard library-9.6 random 1.      random source code:Lib/random.py 1.1.    functions for ...

  8. LINUX下实现按秒执行计划任务

    由于linux最小单位为分,但是很多需求上需要按秒执行,如30秒请求一个URL地址之类的,思路很简单就是修改计划任务脚本用循环控制,代码如下: #!/bin/bash PATH=/bin:/sbin: ...

  9. Azure Active Directory Connect是如何协助管理员工作的?

    TechTarget中国原创] 应用基于云的Microsoft Azure Active Directory,管理员们可以将本地Active Directory整合到Windows Server中.通 ...

  10. Python对文本文件的简单操作(一)

    工作背景 性能测试工程师,主要测试工具--loadrunner,主要是接口测试. 实现功能 loadrunner对报文格式的转换存在问题,部分报文无法转换,故使用Python编写脚本自动将soap协议 ...