zoukankan      html  css  js  c++  java
  • 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。

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

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

  • 相关阅读:
    python之递归函数
    python之内置函数
    python之迭代器与生成器
    python之装饰器函数
    python之函数进阶
    python之初识函数
    一起学Android之Dialog
    一起学Android之Menu
    一起学Android之GridView
    一起学Android之ViewPager
  • 原文地址:https://www.cnblogs.com/dayInAndOut/p/3715656.html
Copyright © 2011-2022 走看看