面朝大海 春暖花开

天行健,君子以自强不息; 地势坤,君子以厚德载物; 宠辱不惊,闲看庭前花开花落; 去留无意,漫随天外云卷云舒。 不妄取,不妄予,不妄想,不妄求, 与人方便,随遇而安。 ——《周易》

导航

JAVA知识点集锦

一、初始化(new)的实际过程

1、在其它任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。

2、调用所有基类(可能有多个父类)的构造器,即执行super()或者super(参数列表),其中前者有可能是隐式被调用的,不能遗漏。如果此时构造器中含有成员方法并且此方法被重写了,则应该执行重写之后的方法。

3、按照声明的顺序初始化本类中的成员变量。

4、调用本类的构造器。

二、对象的比较

1、==  用来比较两个引用是否指向同一个对象。

2、equals()用来识别两个对象是否具有相同的类型内容

例子:String s1 = new String("hello");

        String s2 = s1;

        String s3 = new String("hello");

        System.out.println(s1 == s2);

       System.out.println(s1 == s3);

       System.out.printlns1/equals(s3));

  输出结果:true  false  true

3、instanceof运算符:(1)前一个操作数通常是一个引用类型的变量,后一个操作数通常是一个类;

                              (2)前一个操作数编译时的类型要么与后一个操作数的类相同,要么是后面类的父类,否则会引起编译错误

                              (3)用于判断前一个操作数是否是后面的类,或者其子类、实现类的实例。如果是,就返回True,否则就返回false.

三、final关键字

它可以用来修饰成员变量、方法、类

(一) 修饰成员变量

1、对于基本类型final使数值恒定不变,即是一个常量。

    对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象自身是可以被修改的。

2、空白final:指被声明为final但又未给定初值的成员变量

     要求:空白final在使用之前必须被初始化,初始化的位置是:成员变量的定义处或者每个构造器中。

3、final参数:意味着无法在方法中更改参数引用所指向的对象,即只可读,但不能改。

(二)修饰方法

1、特点:a、防止该方法被覆盖;

             b、提高效率:此时方法的调用会转为内嵌调用,即当编译器发现final时,会根据自己谨慎的判断跳过插入程序代码这种正常方式而执行方法调用机制 (  将参数压入栈,跳至方法代码处并执行,然后跳回并清理栈中的参数,处返回值),并且以方法体中的实际代码的副本来代替方法调用。

 (三)修饰类

1、特点:该类不能被继承;

             final类的成员变量和成员方法可以根据个人意愿选择为是或不是final

四、 内部类

概述:内部类的范围由装入它的外部类的范围限制。这样,如果类B被定义在类A之内,那么B为A所知,不为A外面的所知。内部类可以访问嵌套它的外部类的成员,包括peivate成员。但是,外部类不能访问内部类的成员。(比喻:外部类好比中国,内部类好比台湾。台湾内部的事情可以为中国知道,但是不能让外国知道。台湾可以去中国的任何地方,包括中南海。但是,中国政府不能过分干预台湾)

内部类共有四种类型:静态内部类  成员内部类  局部内部类  匿名内部类

1、静态内部类:用static修饰符声明; 定义在类内部这一级; 只能访问外部类中静态的成员变量和成员方法。

2、成员内部类:定义在类内部这一级。

3.局部内部类:定义在方法体或者更小的语句块中。

4、匿名内部类:不定义它的对象,直接将这个类作为自变量传递给方法。

 五、创建线程

方法一:使用Thread类

1、Thread thread = new Thread(){

           public void run(){

               //费时操作

            }

        }

2、thread.start();

方法二:继承Thread类

1、public class MyThread extends Thread{

         //一个或多个构造方法

         public void run(){

               //费时操作

            }

        }

2、new MyThread().start();  或者 new MyThread(参数列表).start();

方法三:实现Runnable接口

1、public class MyRunnable implements Runnable{

        public void run(){

               //费时操作

            }

     }

2、MyRunnable myRunnable = new MyRunnable();

    Thread thread = new Thread(myRunnable);

六、终止线程

if(thread.isAlive()){

       thread.interrupt();

       thread = null;

    }

七、编译时错误和运行时错误的区别

Java中用2种方法处理异常:

1.在发生异常的地方直接处理;

2.将异常抛给调用者,让调用者处理。

Java异常可分为3种:

  (1)编译时异常:Java.lang.Exception  (继承自Java.lang.Throwable)

  (2)运行期异常:Java.lang.RuntimeException  (继承自Java.lang.Exception)

  (3)错误:Java.lang.Error  (继承自Java.lang.Throwable)

编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。一般是语法有问题,程序在编译时就产生错误,不能编译成.class文件。(如静态调用非静态)

运行期异常: 是逻辑错误,只有通过运行,计算,才能发现的错误,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。

错误: 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

八、单例类

 1、使用场合:不允许自由创建该类的对象,而是只允许为该类创建一个对象

例子:

public class Singleton{

  private static Singleton instance = null;

  private Singleton(){}

  public static Singleton getInstance(){

     if(instance == null){

        instance = new Singleton();

 }

     return instance;

}

}

九、回调函数

1、定义接口CallBack,包括回调函数callBack()

2、定义server端方法: ....方法名(...,CallBack cb){

                            ......

                            cb.callBack();

                             }

3、定义client方法:....方法名(...,new CallBack(){

                                   //实现回调方法callBack()

                                   });

posted on 2012-10-11 21:42  gentle_girl  阅读(326)  评论(0编辑  收藏  举报