楼主: omencathay

[精华] Think in java读书笔记

[复制链接]
论坛徽章:
0
161#
发表于 2004-7-17 19:17 | 只看该作者
大家先看下面这个例子:
class Insect {
int i=9;
int j;
int h= prt("Insect constructor";
public void ss(){
System.out.println("ff";
}
static int x1 =
prt("static Insect.x1 initialized";
public Insect(){
System.out.println("start";
}
static int prt(String s) {
System.out.println(s);
return 47;
}
int f=prt("i = " + i + ", j = " + j);
}

public class Beetle extends Insect {
int k = prt("Beetle.k initialized";
Beetle() {
prt("k = " + k);
prt("j = " + j);
}  
static int x2 =
prt("static Beetle.x2 initialized";
public static void main(String[] args) {
prt("Beetle constructor";
Beetle b = new Beetle();
}
static int x3=prt("static Insect.x3 initialized";
int i=prt("static Insect.x3 initialized";

}

使用道具 举报

回复
论坛徽章:
0
162#
发表于 2004-7-17 19:23 | 只看该作者
答案如下:
static Insect.x1 initialized
static Beetle.x2 initialized
static Insect.x3 initialized
Beetle constructor
Insect constructor
i = 9, j = 0
start
Beetle.k initialized
static Insect.x3 initialized
k = 47
j = 0

相信大家应该已经能看出执行顺序了

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2006-03-09 10:20:06
163#
发表于 2004-7-17 23:21 | 只看该作者
最初由 zdr 发布
[B]

既然使用构造函数的方法所生成的对象,就像其他类生成的对象一样,有自己的独立空间,那么str3和str2代表不同对象,str3==str2怎么会相同呢
不明白,希望再说一下 [/B]


str3和str2是一个对象,在生成str3的时候,系统先找到“Java”(str2)的地址,直接给了str3!!

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2006-03-09 10:20:06
164#
发表于 2004-7-17 23:36 | 只看该作者
关于Inner Classes(From《Core Java 2 Volume I - Fundamentals, 6th Edition》)
Inner Classes
An inner class is a class that is defined inside another class. Why would you want to do that? There are four reasons:

An object of an inner class can access the implementation of the object that created it—including data that would otherwise be private.
内部类对象能够访问创建它的对象的实现---包括那些私有数据!!
Inner classes can be hidden from other classes in the same package.
内部类能够隐藏起来,不为同一包的其他类所见。
Anonymous inner classes are handy when you want to define callbacks on the fly.
匿名内部类可以方便的定义运行时回调。
Inner classes are very convenient when you are writing event-driven programs.
使用内部类在编写事件驱动时的程序时用起来很方便。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2006-03-09 10:20:06
165#
发表于 2004-7-17 23:37 | 只看该作者
哪位对Java代理的原理有体会,指点一下!!

使用道具 举报

回复
论坛徽章:
0
166#
发表于 2004-7-20 15:48 | 只看该作者
各位前辈,偶也在学JAVA最近,于是就和各位一起混了

使用道具 举报

回复
论坛徽章:
0
167#
发表于 2004-7-20 15:52 | 只看该作者
付上自学编写代码一份,乘法99表

//dobblenine.java
//by 夜神月

public class dobblenine
{
    public static void main(String[] args) 
    {
        int i;
        int j;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=1;i<10;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=1;j<=i;j++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==j)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{System.out.println(j+&nbsp;"*"&nbsp;+i+&nbsp;"="&nbsp;+&nbsp;i*j);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{System.out.print(j+&nbsp;"*"&nbsp;+i+&nbsp;"="&nbsp;+&nbsp;i*j&nbsp;+&nbsp;"        ");}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

使用道具 举报

回复
论坛徽章:
59
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-10-28 14:15:35管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
168#
发表于 2004-7-20 22:21 | 只看该作者
最初由 zdr 发布
[B]

既然使用构造函数的方法所生成的对象,就像其他类生成的对象一样,有自己的独立空间,那么str3和str2代表不同对象,str3==str2怎么会相同呢
不明白,希望再说一下 [/B]


有点钻牛角尖的说

"java"是存放在某一段内存中(在编译时它的相对地址已经固定下来了)比如说它的首地址0X00001111(这个数不一定是一个绝对地址, 很可能也是一个相对地址)
str2="java" 实际上相当于把0X00001111赋给了str2
同时
str3="java" 也把0X00001111赋给了str3
str3==str2做的是数值比较, 二者相同是自然的事

str1=new String("java";
则把"java"这段内存复制到另一段内存中去, 然后, 把参照(JAVA中没有指针的概念, 其实把首地址叫做参照更合适, 但无论如何它代表了一个数)赋给str1, 由于str1肯定不会是"java"的参照因此, 数值比较不能成立
Object.equals(Object)(注意, equals方法是从Object基本类中继承下来的, 不光是String可以用, 其他的对象也都能用)则是对象的比较, 换句话说相当于内存的比较, 只有当两断内存完全一致才能成立

JAVA的一个优点就是没有也不需要直接对内存做什么操作,因此比较对象的参照数值基本上没有什么意义

使用道具 举报

回复
论坛徽章:
0
169#
发表于 2004-7-21 09:42 | 只看该作者
对于str3==str2,多谢各位指点! 刚开始接触,以后说不准还要麻烦各位!

使用道具 举报

回复
论坛徽章:
0
170#
发表于 2004-7-21 17:01 | 只看该作者
对super的一点疑问

我下载了think in java全练习的答案,其中有一题,建class A,B,C,其中C extends A,C中建一个B对象。要求为C写一个构建器,并在C的构建器中执行所有初始化工作。答案如下

class A {
  public A(String s) {
    System.out.println("A(): " + s);
  }
}

class B {
  public B(String s) {
    System.out.println("B(): " + s);
  }
}

class C extends A{
  B b;
  public C(String s) {
    super(s);
    b = new B(s);
  }
}

我就不明白super到底起什么作用的?按我的理解应该是如果基类和继承类中存在重复,super调用的就是基类的。
初学不久,希望前辈指点

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表