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

程序源代码;

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. BundleConfig的作用

    在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原 ...

  2. Websocket教程SpringBoot+Maven整合(详情)

    1.大话websocket及课程介绍 简介: websocket介绍.使用场景分享.学习课程需要什么基础 笔记: websocket介绍: WebSocket协议是基于TCP的一种新的网络协议.它实现 ...

  3. IBM MQ Explore使用

    一,版本说明: 系统:win10.MQ:V9.04 二.关于帮助文档: 1.读了差不多一大半,个人感觉说明的比较生僻,应该是直译过来的.但是还是可以从这里面学一下基本的操作. 2.对于一些基本的操作, ...

  4. Java continue break 制作简单聊天室程序,屏蔽不文明语言,显示每句话聊天时间 for(;;) SimpleDateFormat("yyyy-MM-dd hh:mm:ss") equalsIgnoreCase

    package com.swift; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanne ...

  5. oc字典

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  6. oracle数据库删除表时遇见需要解锁问题

    今天在进行数据清空时,不注意把表锁住了,记录一下解锁过程. 第一步执行 select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked ...

  7. UOJ#386. 【UNR #3】鸽子固定器(链表)

    题意 题目链接 为了固定S**p*鸽鸽,whx和zzt来到鸽具商店选购鸽子固定器. 鸽具商店有 nn 个不同大小的固定器,现在可以选择至多 mm 个来固定S**p*鸽鸽.每个固定器有大小 sisi 和 ...

  8. 认识mysql(1)

    ---恢复内容开始--- 1.MySQL概述 1.什么是数据库? 存储数据的仓库 2.都有哪些公司在用数据库? 金融机构.游戏公司.购物网站.论坛网站... 3.提供数据库服务的软件? 1.软件分类 ...

  9. LeetCode948-令牌放置

    问题:令牌放置 你的初始能量为 P,初始分数为 0,只有一包令牌. 令牌的值为 token[i],每个令牌最多只能使用一次,可能的两种使用方法如下: 如果你至少有 token[i] 点能量,可以将令牌 ...

  10. h5获取摄像头拍照功能

    完整代码展示 <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <met ...