首页 > 代码库 > Screen shorts 笔记整理 容易忘的

Screen shorts 笔记整理 容易忘的

2.3

当创建一个数组对象时, 实际上是创建了 引用数组。

且每个引用 都自动被初始化为 null

java 看到null,就知道这个引用还没有指向某个对象

 

也可以创建用来存放基本数据类型的数组,同样,编译器也能确保这种数组的初始化,

全部置零。

 

2.3.2 作用域

java对象 可以存活于作用域之外,对象不同于引用哦。

对象由垃圾回收器来辨别是否不再被使用。不必担心内存泄露。

 

如果字段是对某个对象的引用,那么必须初始化该引用,以使其与实际的对象相关联;

当 基本数据类型 变量作为 类的字段 时,java确保给定其默认值 0

上述确保初始化的方法并不适用与“局部”变量??——即并非某个类的字段

 

2.6.2 import —— 编译器定位 预先定义好的类(假如想使用某个类,但其定义却

不止一份)

import 来准确地告诉编译器你想要的类是什么,import指示编译器导入一个 包,也就

是一个类库

 

2.6.3 static

通常类 就是在描述类的对象的样子和行为

除非用new 创建那个类的对象, 否则,实际上并未获得任何对象。

 

当声明一个事物是static时,就意味着 这个字段或方法不会与包含它的那个类的任何

对象 实例 关联在一起。

所以即使从未创建某个类的任何对象,也可调用其static方法或访问其static字段。

 

通常,你必须创建一个对象,并用它来访问数据或方法,因为 非 static域或方法必须知道它们

一起的特定对象。

(主要是因为和存储相关,static的是独立存储的,还要类的对象干嘛。 非static的 没有对象,哪来的它们?)

 

使用: 使用类名是引用static变量或方法的首先方式

static 的域或者方法,在类的代码导入时就存在了, 不需要创建对象。

 

 

3.2 操作符

几乎所有的操作符都只能操作“基本类型”

例外的是 =   ==  和 !=    这些操作符能操作所有对象(这也是容易糊涂的地方)

除此之外,String类支持 +  和 +=

 

String 跟一个 “+” ,而这个“+”后面紧跟着一个非String类型元素时,会尝试将这个非

String类型元素转换为String。    

对对象使用 c=d 那么 c和d都指向d指向的对象。  也就是说我们时刻都是在对引用赋值,而不是对象。    别名问题。

引用比较:

很明显下面的两个引用指向的是不同的对象。 虽然对象存储的“数值”一样。

  Integer i1 = new Integer(1);
  Integer i2 = new Integer(1);
  //Integer i2=i1;
  if(i1 == i2)
   System.out.println("==");
  else
   System.out.println("!=");    right

 

所谓比较的是引用指的是:

  Integer i1 = new Integer(1);
  Integer i2=i1;
  if(i1 == i2)
   System.out.println("==");  right
  else
   System.out.println("!=");

 

比较 对象的内容,即 对象存储的值 用 equals 来比较。 而非对象的引用。

 

逻辑表达式 与 或   操作 只可应用于布尔值:

可以使用 关系比较运算 生成 布尔值。

i1 == xx

 

逻辑操作 ——“短路”现象  , 有时后面的测试不会执行

 

 

初始化顺序:

先静态对象 后 非静态

 

1. 构造器实际上是静态方法,因此当首次创建类的对象时,

   或者类的静态方法/静态域首次被访问时,

Java 先查找类路径,定位.class文件

2. 然后载入 .class ,有关静态初始化 的所有动作都会执行。因此,静态初始化只在Class首次加载的时候进行一次。

3. new 创建对象时候,首先在堆上分配足够空间,顺便清零。

4. 执行 字段定义处的初始化动作。(肯定是先分配空间(捎带清零)后执行指定初始化动作)

5. 执行构造器。 (涉及到继承)

 

初始化顺序,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,

它们仍会在任何方法(包括构造器)被调用之前得到初始化。

 

 

数组:

不允许指定数组的大小。

只是一个 数组类型(的"引用")  —— 跟大小无关  或 无关大小

为了 给数组“引用” 指向 相应的存储空间, 需要初始化表达式

数组的初始化 可以出现在任何地方(相对应 对象引用 来说, 对象也是一样的)

但也可使用一种特殊的初始化表达式,它必须在数组创建的地方出现。

 

 java中可以将一个数组赋值给另一个数组

int[] a1 = {1,2}; int[] a2;

a2 = a1;

 

int[] a;

a = new int[rand.nextInt(20)];

尽管创建的是基本类型数组,new仍然可以工作,不能用new

创建单个的基本类型 数据。

上面表面数组的 创建确实是在运行(相对 编译时确定 来说)时刻进行的。

还是说明,编译器 不要求确定数组的大小。

 

数组初始化的灵活形式:(不必在数组定义之处)

尽管  int[] a={2,5,1};

这种形式很有用,但是它只能用于数组被定义之处。

这种初始化是由一对花括号括起来的值组成。

 

下面是两种更灵活的形式:

{new Integer(2), new Integer(5), 1};

new Integer[]{new Integer(2), new Integer(5), 1};

甚至可以用在方法调用时

main( new String[]{"afd", "afasd"} )

 

如果是 int[] a;

它可以使用new int[]{1,2};

数组灵活初始化模板: new ClassName[]{value....list...};