ImageVerifierCode 换一换
格式:DOCX , 页数:114 ,大小:48.84KB ,
资源ID:9678516      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9678516.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java编程思想读书笔记.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java编程思想读书笔记.docx

1、Java编程思想读书笔记Java编程思想读书笔记1(第57章) 作者:未知 时间:2005-07-24 21:15 出处:JR 责编:My FAQ 摘要:Java编程思想读书笔记1(第57章) 第2章 万事万物皆对象一所有对象都必须由你建立1 存储在哪里1. 寄存器:我们在程序中无法控制2. stack:存放基本类型的数据和对象的reference,但对象本身不存放在stack中,而是存放在Heap中3. Heap:存放用new产生的数据4. Static storage:存放在对象中用static定义的静态成员5. Constant storage:存放常量6. NON-RAM:硬盘等永久存

2、储空间2 特例:基本型别基本类型数据存放在Stack中,存放的是数据。而产生对象时,只把对象的reference存放在stack中,用于指向某个对象,对象本身存放在Heap中。3 Java中的数组当你产生某个存储对象的数组时,真正产生的其实是存储reference的数组。引数组建立后,其中的每一个reference都会被自动设为null,表示“不指向任何对象”。二建立新的数据型别:Class1 数据成员和函数1.1 基本成员的缺省值1) 当class的某个成员属于基本型别时,即使你没有为它提供初值,Java仍保证它有一个缺省值。2) 只有当变量身份是“class内的成员时,Java才保证为该变

3、量提供初值。三函数(Mehtods),引数(arguments),返回值(return values)1 引数列当引数传递的是对象时,传递的是对象的reference。四注解用内嵌式文档Java提供两种注解风格:/*XXXX*/、/XXXX第3章 控制程序流程一使用Java运算符1.关系运算符1.) 当对两个对象运用关系运算符进行比较时,比较的是object reference,如:java/lang/Integer.java.html target=_blankInteger n1 = new java/lang/Integer.java.html target=_blankInteger(

4、3); java/lang/Integer.java.html target=_blankInteger n2 = new java/lang/Integer.java.html target=_blankInteger(3); java/lang/System.java.html target=_blankSystem.out.println(n1=n2); 结果为false,因为两个object reference(n1和n2)值是不同的2) quals()的缺省行为也是拿referenct来比较。不过Java中的class覆写了equals方法,如:java/lang/Integer.j

5、ava.html target=_blankInteger n1 = new java/lang/Integer.java.html target=_blankInteger(3); java/lang/Integer.java.html target=_blankInteger n2 = new java/lang/Integer.java.html target=_blankInteger(3); java/lang/System.java.html target=_blankSystem.out.println(n1.quals(n2);/值为true 2 逻辑运算符1) 只能将and、

6、or、not施用于boolean值身上。如果逻辑运算符两边的值存在non-boolean值,将会出错,如:int test1 = 1; java/lang/System.java.html target=_blankSystem.out.println(test & 12);/编辑出错,test是non-boolean值 3 位移运算符如果所操作的位移对象是char、byte、short,位移动作发生之前,其值会先被晋升为int,运算结果会是int。二流程控制1 迭代(iteration)1.1 逗号运算符逗号运算符只能用于for循环的控制表达式中的initialization和step两部分

7、中,如:for(int i=0, j=I+1; IString args) /Sundae x = new Sundae();会编译出错,无构造函数Sundae() Sundae y = new Sundae(1); :在定义一个class时,如果定义了自己的构造函数,最好同时定义一个default构造函数3 关键字this1) this仅用于函数之内,能取得“唤起此一函数“的那个object reference。2) 在构造函数中,通过this可以调用同一class中别的构造函数,如public class Flower Flower (int petals) Flower(java/lan

8、g/String.java.html target=_blankString ss) Flower(int petals, Sting ss) /petals+;调用另一个构造函数的语句必须在最起始的位置 this(petals); /this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数 :1)在构造调用另一个构造函数,调用动作必须置于最起始的位置 2)不能在构造函数以外的任何函数内调用构造函数 3)在一个构造函数内只能调用一个构造函数4 Static的意义无法在static函数中调用non-static函数(反向可行)。为什么不能呢,我们看下面的例子。例4.2.4.1假设能

9、在static函数中调用non-static函数,那么(a)处就将出错。因为在没有产生Movie class实例之前,在就不存在Movie class内的name实例,而在getName()中却要使用name实例,显然的错误的。class Movie java/lang/String.java.html target=_blankString name = “”; Movie() public Movie(java/lang/String.java.html target=_blankString name) this.name = name; public static java/lang/

10、String.java.html target=_blankString getName() return name; public class Test public static void main(java/lang/String.java.html target=_blankString args) /下面两名先产生实例后再调用getName()没有问题 /Movie movie1 = new Movie(“movie1”); /String name1 = movie1.getName(); /下面一名将出错 /String name2 = Movie.getname(); (a)

11、三清理(cleanup):终结(finalization)与垃圾回收(garbage collection)1)你的对象可能不会被回收只有当程序不够内存时,垃圾回收器才会启动去回收不再被使用的对象的内存空间。某个对象所占用的空间可能永远不会被释放掉,因为你的程序可能永远不会逼近内存用完的那一刻,而垃圾回收器完全没有被启动以释放你的对象所占据的内存,那些空间便会在程序终止时才一次归还给操作系统3) 只有在采用原生函数(native methods)时,才使用finalize()。四成员初始化(member initialization)1) 函数中的变量不会被自动初始化,如void f() in

12、t i; i+; 将发生编译错误,因为i没有被初始化。2) class的数据成员会被自动初始化,具体情况如下(见P220例子):基本型别:boolean:false、char:null(u0000)、byte:0、short:0、int:0、long:0 、float:0、double:0 对象(reference):null1 初始化次序1) 所有变量一定会在任何一个函数(甚至是构造函数)被调用之前完成初始化(见P233例子)2) 在产生一个class的对象(包含static成员的class的代码被装载)时,首先自动初始化class中的static成员变量,再执行所有出现于static数据定

13、义处的初始化动作,最后执行static block,所有这些初始化操作只在第一次生成该对象时进行。3) 自动初始化class中的其它成员变量。4) 执行所有出现于数据定义处的初始化动作。如:int i=1;的执行顺序是先把I自动初始化为0,再执行数据定义处的初始化动作,初始化为1。5) 执行non-static block6) 调用构造函数。例:class Cup Cup(int marker) java/lang/System.java.html target=_blankSystem.out.println(Cup( + marker + ); void f(int marker) jav

14、a/lang/System.java.html target=_blankSystem.out.println(f( + marker + ); class Cups static Cup c1 = new Cup(11); static Cup c2; Cup c3 = new Cup(33); Cup c4; c3 = new Cup(3); c4 = new Cup(4); static c1 = new Cup(1); c2 = new Cup(2); Cups() java/lang/System.java.html target=_blankSystem.out.println(C

15、ups(); public class ExplicitStatic public static void main(java/lang/String.java.html target=_blankString args) java/lang/System.java.html target=_blankSystem.out.println(Inside main(); Cups.c1.f(99); static Cups x = new Cups(); static Cups y = new Cups(); 结果为:Cup(11)Cup(1)Cup(2)Cup(33)Cup(3)Cup(4)C

16、ups()Cup(33)Cup(3)Cup(4)Cups()Inside main()f(99)2 Array的初始化1) 定义数组时不能指定大小。如int4 iArr = 0, 1, 2, 3;,由于指定了数组的大小,会编译出错。2) 数组只是存放reference的数组。Array与non-array的结构图如下:a)对于基本型别数据,存放的是数据。如int i = 5;b)对于class变量,存放的是reference,这个reference指向一个存有class实例的内存空间。如java/lang/String.java.html target=_blankString s = “he

17、llo”; 变量s存放的是一个reference,这个reference指向一个存有String实例的内存空间。c)对于基本型别数组,存放的是reference数组,数组中的每一个reference都指向一个class实例的内存空间。如int ia = 10, 11, 12; 数组ia存放的是一个reference数组,数组中的每一个reference都指向一个的int实例的内存空间。d)对于class数组,存放的是reference数组,数组中的每一个reference都指向一个的class实例的内存空间。如java/lang/String.java.html target=_blankSt

18、ring sa = “hello1”, “hello2”, “hello3”; 数组sa存放的是一个reference数组,数组中的每一个reference都指向一个的String实例的内存空间。3) 任何数组都要进行初始化,使用没有进行初始化的数组会产生运行时错误,如: int iArr; java/lang/System.java.html target=_blankSystem.out.pritnln(iArr0);/产生错误,因为iArr还未初始化 数组初始化可在任何地方,可用以下方法来对数组进行初始化:a) int iArr = 1,1,1,1;/数组的长度为元素的个数b) int

19、i = 10; int iArr = new int;/数组的长度可为变量(这在C/C+中不行) java/lang/System.java.html target=_blankSystem.out.println(iArr0);/iArr0是一个int,自动初始化值为0 java/lang/Integer.java.html target=_blankInteger iArr2 = new java/lang/Integer.java.html target=_blankInteger; java/lang/System.java.html target=_blankSystem.out.p

20、rintln(iArr20);/iArr0是一个reference,自动初始为null I) 对于基本型别数组,new产生的是用于存放数据的数组;否则,产生的只是存放reference的数组。II) new可用来初始化基本型别的数组,但不能产生non-array的基本型别数据。c) int iArr = new int1,1,1,1;java/lang/Integer.java.html target=_blankInteger iArr2 = new java/lang/Integer.java.html target=_blankIntegernew java/lang/Integer.j

21、ava.html target=_blankInteger(1), new java/lang/Integer.java.html target=_blankInteger(2); 3 多维数组(Multidimensional)arrays多维数组每一维的大小可以不一样,如:java/lang/Integer.java.html target=_blankInteger a5; a5 = new java/lang/Integer.java.html target=_blankInteger3; for(int i=0; iIntegeri+1; for(int j=0; jIntegeri

22、+j+1; 第5章 隐藏实现细节一Java访问权限饰词(access specifiers)Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。1 friendly1) 果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的defau

23、lt package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package,但隶属于相同的default package。class Sundae /以下两个方法缺省为friendly Sundae() java/lang/Void.java.html target=_blankVoid f() java/lang/System.java.html target=_blankSystem.out.println(“Sundae.f()”); public class IceCream public static void

24、 main(java/lang/String.java.html target=_blankString args) Sundae x = new Sundae(); x.f(); 2 public:可以被任何class调用3 private:private成员只能在成员所属的class内被调用,如:class Sundae private Sundae()/只能在Sundae class中被调用 Sundae(int i) static Sundae makASundae() return new Sundae(); public class IceCream public static v

25、oid main(java/lang/String.java.html target=_blankString args) / Sundae class中构造函数Sundae()是private, / 所以不能用它进行初始化 /Sundae x = new Sundae(); Sundae y = new Sundae(1);/Sundae(int)是friendly,可以在此调用 Sundae z = Sundae.makASundae(); 4 protected:具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。二Class的访问权限 1Class同样具有public、protect、friendly、private四种访问访问权限: 1)public:在任何地方都可被使用2)protect、private:除了它自己,没有任何class可以使用,所以class不能是protected或private(inner class除外)3) friendly:同一个package中的classes能用2 如何调用构造函数被声明为private的class

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1