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...};

因为数组 引用,不指定大小,因此 数组 参数可以用作可变参数。

具体初始化传值时候,才确定数组实际的大小。

main(String[] args ) 就是一个可变参数的例子

传参数:main(new String[]{"afdf", "fdf"})

java SE5之后的样式: (ClassName... xxx)

printArray(Object... args)

传参数:printArray(new Integer(2), new Float(3.1));  新的可变参数语法 省略了大括号

而不必当 数组语法 来传值。

5.9 枚举类型


enum EnuColor{
 RED,
 BLUE,
 WHITE
}

public class Test{
 
 public static void main(String[] args){  
  EnuColor loveColor = EnuColor.BLUE;
  loveColor = EnuColor.RED;
  System.out.println(loveColor);
 }
}

访问控制——隐藏具体实现 与“最初的实现并不恰当”有关

访问权限修饰词 ——标明 哪些是可供客户端人员使用

 包: 包内 有一组类(指的是pubic类),他们在单一的名字空间之下。

当 编写一个Java源代码文件时,可以有一个public类(也可以没有,并非必须有!),只能有一个public类。

如果在该文件之中还有额外的类的话, 那么在 外的世界是无法看见这些类的。——包内访问权限

他们不是给外界用的,为public类提供支持。

包内可见的东西,无需过多关注。 外界不关心。

需要把 .java 打包到某个 package的话:

语法: package PackageName;

package外的类  使用某个package里的类(只能是public的)使用:

import  PackageName.ClassName;

package mypackage2;

import mypackage.NoInherit;

包访问权限 ——  包 共享      包外就像不存在一样,private。

当把类组织起来放进一个包内时,就给它们的包访问权限的成员赋予了

相互访问的权限。  包访问权限 为把类聚在一个包中的做法提供了意义

原文地址:https://www.cnblogs.com/dayInAndOut/p/3715656.html