Java私塾基础note

1.boolean 类型不可以用数字表示

2.switch 的表达式expr1只能是整数型的值或者是 enum 枚举类型的常量值,

  包含 byte、short、int 和 char,不能是字符串或对象,也不能是 long 型的值。
 
3.属性:类的属性就是对象所具有的静态属性
  定义规则:访问修饰符  修饰符  类型  属性名称  =  初始值
          public    static String   s   =   “123”;

4.方法就是对象所具有的动态功能
  定义规则:
  访问修饰符  修饰符  返回值类型  方法名称 (参数列表) throws 异常列表 {方法体}
  public    static void      main    (String[] args)          {}
5.new关键字的功能:
 (1)为对象实例分配内存空间
 (2)初始化对象实例

6.this关键字:用来指向当前对象或类实例
  功能:(1)点取成员
        (2)区分同名变量
        (3)作为方法名来初始化对象

7.java类第一步运行:  public static void main(String[] args) {...}

8.初始化一个类必先初始化它的属性

9.局部变量必须在使用之前“手工”初始化

10.凡是用new关键字创造的对象实例都是应用类型
   在java里除去基本数据类型的其他类型都是应用数据类型
   String类型比较特殊殊

11.
  class A
  {
      public String name = "";
  }
  public class T1 extends Test
  {
      private void t(A a)
      {
          // 如果不加这句
          // a = new A();
          // main方法中对象实例a的name值将会被修改
          // 最后会都输出"t的方法"
          a = new A();
          a.name = "t的方法";
          System.out.println("t.a == " + a.name);
      }    
      public static void main(String[] args)
      {
          T1 t = new T1();
          A a = new A();
          a.name = "main的方法";
          t.t(a);
          System.out.pritnln("main.a == " + a.name);
      }
  }
  输出:
  t的方法
  main的方法

12.初始化子类必先初始化父类
   构造方法不能被继承

13.super 关键字的功能
   (1)点取父类中被子类隐藏了的数据成员
   (2)点取已覆盖了的方法
   (3)作为方法名表示父类构造方法
   对 super 的调用必须是构造方法的第一个语句
   无论是 super 还是 this 都必须放在构造函数的第一行

14.编译时看数据类型,运行时看实际的对象类型(new操作符后跟的构造方法是哪个类的)。
   一句话:new谁就调用谁的方法。

15.覆盖方法的规则
   (1)覆盖方法的返回类型,方法名称,参数列表必须与它所覆盖的方法相同
   (2)覆盖方法不能比它所覆盖的方法的访问性差,即访问权限不允许缩小
   (3)覆盖方法不能比它所覆盖的方法抛出更多的异常

16.重载:方法名相同,参数列表不同
     参数列表不同包括:个数不同,类型不同,顺序不同等等
     构造方法也可以重载
     public void t1(int a) {}
     public int t1() {}
     方法重载的返回类型可以相同也可以不同。

17.instanceof 运算符的功能
   用来判断实例变量是否属于某种类的类型

18.多态类型的强制转换
   向上强制类型转化类层次总是允许的,而且事实上不需要强制类型转换运算符。可由简单的赋值实现。
   严格讲,不存在向下类型转换。

19.static 属性的内存分配
   一个类中,一个 static 变量只会有一个内存空间,虽然有多个类实例,
   但这些类实例中的这个 static 变量会共享一个内存空间。

20.static 的变量是在类装载的时候就会被初始化。

21.static 的基本准则
   (1)一个类的静态方法只能访问静态属性
   (2)一个类的静态方法不能够直接调用非静态方法
   (3)若访问控制权限允许,static 属性和方法可以使用对象名家‘.’方式调用;
        当然也可以使用实例加‘.’方式调用
   (4)静态方法中不存在当前对象,因而不能使用“this”,当然也不能使用“super”
   (5)静态方法不能被非静态方法覆盖
   (6)构造方法不允许声明为static的
    注:非静态变量只属于实例,并只能通过实例应用被访问。
    
22.final 修饰符:在java中申明类、属性和方法时,可使用关键字final来修饰。final所标记的
   成分具有“终态”的特征,表示最终的意思。
   
23.final 的具体规则:
   (1)final 标记的类不能被继承
   (2)final 标记的方法不能被子类重写
   (3)final 标记的变量(成员变量或局部变量)只能赋值一次
   (4)final 标记的成员变量必须在声明的同事赋值,如果在声明的时候没有赋值,那么只有一次
       赋值的机会,而且只能在构造方法中显示赋值,然后才能使用。
   (5)final 标记的局部变量可以只声明不赋值,然后再进行一次性的赋值
   (6)final 一般用于标记那些通用性的功能、实现方式或取值不能随意更改的成分,以避免被误用
   
24.static 不能修饰局部变量,final可以(包括参数列表)。
     (3)“==”进行比较的时候,引用类型数据比较的是引用,及内存地址,基本数据类型比较
                 的是值。

25.(1)如果将引用类型(即,任何类的类型)的变量标记为 final,那么该变量不能指向任何其他
       象。但可以改变对象的内容,因为只有引用本身是 final 的。
   (2)final 除了可以使用在类定义、属性上、方法上之外,还可以用于方法内部,比如参数列表
           或者局部变量都是可以的。
           
26.由于String类值的不可变性,当String变量需要经常变换其值时,应该考虑使用StringBuffer
   或StringBuilder类,以提高程序效率。
   
27.数组的静态性:数组一旦被创建,就不能更改数组的长度。

28.equals方法:Object类定义的equals方法用于判别某个指定的对象与当前对象(调用
     equals方法的对象)是否等价。数据等价的基本含义是指两个数据的值相等。
    
29.equals方法与“==”运算符的关系
     (1)equals()方法只能比较引用类型,“==”可以比较引用类型及基本类型
     (2)默认的equals()方法比较的是内存地址,基本等同于“==”,但对于File、String、
              Date及包装类来说,是比较的值而不是内存地址
     (3)“==”进行比较的时候,引用类型数据比较的是引用,及内存地址,基本数据类型比较
                 的是值。
                 
30.覆盖equals方法的一般步骤如下:
     (1)用==检查是否参数就是这个对象的引用
     (2)判断要比较的对象是否为null,如果是null,返回false
     (3)用instanceof判断参数的类型是否正确
     (4)把参数转换城合适的类型
     (5)比较对象属性值是不是匹配
    
31.覆盖equals方法一定要连带覆盖hashCode方法

32.对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类,这两个类功能基本
     相似,区别主要在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安
     全的,相比而言StringBuilder类会略微快一点。
    
33.抽象类简单来说,使用abstract修饰的类就是抽象类。
    abstract 修饰符可以与类和方法一起使用。被修饰的类不能被实例化,被修饰的方法必须在包
    含此方法的类的子类中被实现。
    public abstract class Test{    //抽象类定义
        public abstract void doItByHand();    // 抽象方法定义
    }      
    
34.有抽象方法的类一定是抽象类,抽象类不一定有抽象方法。

35.不能有抽象构造方法或抽象静态方法。abstract 类的子类为它们父类中的所有抽象方法提供实现,
    否则它们也是抽象类。
    
36.在下列情况下,一个类将成为抽象类:
    (1)当一个类的一个或多个方法是抽象方法时;
    (2)当类是一个抽象类的子类,并且不能为任何抽象方法提供所有实现细节或方法主体时;
    (3)当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法主体时;

37.接口是一种特殊的抽象类,这种抽象类只包含常亮和方法的定义,而为没有变量和方法的实现。
    定义接口的语法格式:
    访问修饰符 修饰符 interface 接口名称
    {
        抽象属性集
        抽象方法集
    }
    
38.    (1)接口中声明的属性默认为,也只能是 public static final 的, 因而在常量声明时可以省略这些修饰符
    (2)接口中只能定义抽象方法,这些方法默认为 public abstract 的、也只能是 public abstract 的,
        因而在声明方法时可以省略这些修饰符
    (3)和继承抽象方法类似,Java类可以“实现”接口
    
39.    接口可以多继承

40.接口的基本作用
    (1)声明方法,期望一个或更多的类来实现该方法。
    (2)揭示一个对象的编程接口,而不揭示类的实际程序体。
    (3)捕获无关类之间的相似性,而不强迫类关系。
    (4)可以作为参数被传递到在其它对象上的调用方法中
    
41.多重接口:
    一个类实现多个接口就被称为多重接口。
    一个类只可以继承一个父类,但可以实现多个接口。
    类不可以多继承,因为两个父类的变量和方法可能重复。而接口不会继承变量,即便两个接口方法定义相同,
    接口中没有方法实现,类中也只有一个方法实现。
    
42.接口和抽象类的选择
    (1)优先选用接口,尽量少用抽象类
    选择抽象类的时候通常在如下情况:
    (2)需要定义子类的行为,有要为子类提供共性的功能。
    
43.try {} catch {} 的语法
    try {
        // 可能出错的代码
    } catch (异常类型 e) {
        // 异常处理代码
    }
    
44.当多个catch块存在的时候,从上往下catch异常的范围应该从小到大,因为catch块的运行机制是找到一个
    匹配的就进行处理,如果把范围大的放在前面,那么后面的代码就没有机会运行了,这会是一个编译异常。
    
45.finally 块
    (1)finally 块:无论是否出现异常,都会运行的块。
    (2)通常在 finally 块中可以编写资源返回给系统的语句,通常这些语句包括但不限于:
        1.释放动态分配的内存块
        2.关闭文件
        3.关闭数据库结果集
        4.关闭与数据库建立的连接
    finally 紧跟这最后一个块,是可选的,不论是否抛出异常, finally块总会被执行。
    语法如下:
    try{
    }catch(异常类型 e)
    {
    }finally{
    }
    
46.try、catch、finally 块的关系
    (1)try 块不能单独存在,后面必须跟 catch 块或者 finally 块
    (2)三者之间的组合为: try - catch、 try - catch - finally、 try - finally
    (3)一个 try 块可以有多个 catch 块,从上到下多个 catch 块的范围为从小到大
    
47.throw 语句用来从代码中主动抛出异常。throw 的操作数是人一种异常类对象。下面是 throw 关键字的一
    个示例:
    try{
        int i = 5/0;
    } catch (ArithmeticException i) {
        throw new Exception ("Can not be divided by zero!");
    }
    
48.throws 语句
    (1)throws 用来在方法定义时声明异常,其后列出了此方法可能抛出的异常列表。
    (2)Java中对异常的处理有两种方法,一个就是 try - catch, 然后自己处理;一个就是不做处理,
        向外 throws,由别人去处理。
    public static void main(String[] args) throws Exception {}

你可能感兴趣的:(java)