首页 > 代码库 > 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...};