当前位置:编程学习 > JAVA >>

Java编程思想读书笔记-1(第5-7章)

第2章    万事万物皆对象


一.所有对象都必须由你建立
1.    存储在哪里
1.    寄存器:我们在程序中无法控制
2.    stack:存放基本类型的数据和对象的reference,但对象本身不存放在stack中,而是存放在Heap中
3.    Heap:存放用new产生的数据
4.    Static storage:存放在对象中用static定义的静态成员
5.    Constant storage:存放常量
6.    NON-RAM:硬盘等永久存储空间
2.    特例:基本型别
基本类型数据存放在Stack中,存放的是数据。而产生对象时,只把对象的reference存放在stack中,用于指向某个对象,对象本身存放在Heap中。
3.    Java中的数组
当你产生某个存储对象的数组时,真正产生的其实是存储reference的数组。引数组建立后,其中的每一个reference都会被自动设为null,表示“不指向任何对象”。
二.建立新的数据型别:Class
1.    数据成员和函数
1.1    基本成员的缺省值
1)    当class的某个成员属于基本型别时,即使你没有为它提供初值,Java仍保证它有一个缺省值。
2)    只有当变量身份是“class内的成员时,Java才保证为该变量提供初值。
三.函数(Mehtods),引数(arguments),返回值(return values)
1.    引数列
当引数传递的是对象时,传递的是对象的reference。
四.注解用内嵌式文档
Java提供两种注解风格:/*XXXX*/、//XXXX

第3章    控制程序流程


一.使用Java运算符
1.关系运算符
1.) 当对两个对象运用关系运算符进行比较时,比较的是object reference,如:
  1. Integer n1 = new Integer(3);
  2. Integer n2 = new Integer(3);
  3. System.out.println(n1==n2);

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

2.    逻辑运算符
1)    只能将and、or、not施用于boolean值身上。如果逻辑运算符两边的值存在non-boolean值,将会出错,如:
  1. int test1 = 1;
  2. System.out.println((test && 1<2);//编辑出错,test是non-boolean值
3.    位移运算符
如果所操作的位移对象是char、byte、short,位移动作发生之前,其值会先被晋升为int,运算结果会是int。
二.流程控制
1.    迭代(iteration)
1.1    逗号运算符
逗号运算符只能用于for循环的控制表达式中的initialization和step两部分中,如:for(int i=0, j=I+1; I<5; i++, j=I*2)
1.2    break和continue
break表示退出循环;continue表示退出本次循环,回来循环起始位置。
1.3    label
label只有放在迭代语句之前才起作用,在label和迭代语句之间插入任何语句都不会起作用。
2.    Switch
switch中的选择器必须是int或char型,如:
  1. float i = 2;
  2. switch ( i )//将出错,因为i不是int或char之一

3.    计算细节
1)    从float或double转为整数值,总是以完全舍弃小数的方式进行。
4.    Math.random()的输出范围是[0, 1]。

第4章    初始化和清理


一.以构造函数(constructor)确保初始化的进行
如果某个class具备构造函数,Java便会在对象生成之际,使用者有能力加以操作之前,自动调用其构造函数,于是便能名确保初始化动作一定被执行。
二.函数重载(Method overloading)
1.    区分重载函数
由于只能从函数名和函数的引数列来区分两个函数,而重载函数具有相同的函数名称,所以每个重载函数都必须具备独一无二的引数列。
2.    Default构造函数
1)    default构造函数是一种不带任何引数的构造函数。如果你所开发的class不具任何构造函数,编译器会自动为你生成一个default构造函数。
2)    如果你自行定义了任何一个构造函数(不论有无引数),编译器就不会为你生成default构造函数。
3)    如果定义了一个class,如
  1. class Bush{
  2.   Bush(int I){}
  3. }

当想用new Bush();来产生class的实例时,会产生错误。因为在定义class时已定义了构造函数,所以编译器就不会为class生成default构造函数。当我们用new Bush()来产生实例时,会尝试调用default构造函数,但在class中没有default构造函数,所以会出错。如:
  1. class Sundae
  2. {
  3.     Sundae(int i) {}
  4. }
  5. public class IceCream
  6. {
  7.     public static void main(String[] args)
  8. {
  9.             //Sundae x = new Sundae();会编译出错,无构造函数Sundae()
  10.         Sundae y = new Sundae(1);
  11.     }
  12. }

*:在定义一个class时,如果定义了自己的构造函数,最好同时定义一个default构造函数
3.    关键字this
1)    this仅用于函数之内,能取得“唤起此一函数“的那个object reference。
2)    在构造函数中,通过this可以调用同一class中别的构造函数,如
  1. public class Flower{
  2.         Flower (int petals
    补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,