java小总结

来源:互联网 发布:怎么卸载mac自带系统 编辑:程序博客网 时间:2024/05/01 07:28

有时候有一些弄得不怎么懂,或者懂得不那么深的问题,复习一下,温故而知新。


java泛型

泛型是Java SE 1.5的新特性,之前一直不怎么懂泛型,但是时不时看见别人用。知道他可以替代任何类,有点像object。但是为什么不直接用object呢?

因为object需要强转,而强转又容易抛出ClassCastException错误,而且不符合java编程规范。应该应用泛型。

一般的应用开发中泛型使用较少,多用在框架或者库的设计中。List<T>为典型。

参考:http://transcoder.baidu.com/from=844b/bd_page_type=1/ssid=0/uid=0/pu=sz%401320_1001%2Cta%40iphone_2_5.1_3_537%2Cusm%401/baiduid=8772F7BD2F6AD2881B4E0384ABAB30F6/w=0_10_java泛型/t=iphone/l=3/tc?ref=www_iphone&lid=16782427900203174478&order=3&fm=alop&tj=www_normal_3_0_10_title&vit=osres&m=8&srd=1&cltj=cloud_title&asres=1&title=Java泛型详解%2C通俗易懂只需5分钟_微学苑%28编程第一站%29&dict=30&sec=14612&di=3620d3cdc9b94b36&bdenc=1&tch=124.449.66.585.1.365&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_zdV_y_bmFSiefqlHdFuJ7HNRn_TFICb9jTRsx9PaDD7Qq&eqid=e8e72942143708001000000457b8c36e&wd=&clk_info=%7B"srcid"%3A"www_normal"%2C"tplname"%3A"www_normal"%2C"t"%3A1471726472812%2C"xpath"%3A"div-a-h3-em"%7D&qq-pf-to=pcqq.c2c



java extends和implement有什么区别和联系? 

B extends A   那么B是A的子类。

B implement A   那么B是不是A的子类? (答案是:是的,因为B也拥有了A的所有变量和方法) 一般用在监听事件。

1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,
2.JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,也只能继承接口。
3.继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 ,
      比如  class A extends B implements C,D,E{}   



java强转(强制转换)

1.子类转化成父类的时候,不需要强转。编译器直接允许。因为子类包含父类的所有变量和方法,(子类通过不断的重写父类,以达到更强大的功能)比如:List<Model> list = new ArrayList<Model>(); (ArrayList 为List的子类)

2.父类转子类需要强转。没有继承关系,不同类型都需要强转。

这个其实就简单了,是因为代码打少了,所以对这基础的知识不熟悉,所以如果你是新手,肯定要多打代码,多进行尝试。

 当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。例如:

       Father father = new Father();

       Son son = (Son) father;

       这个系统会抛出ClassCastException异常信息。

    所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。

详细参考:http://blog.csdn.net/chenssy/article/details/14111307



java执行顺序

这个大家都知道,代码是按顺序执行的,但是这是括号内的情形,在括号外是怎么样的呢?比如:定义的成员变量、定义的静态变量、块、定义的静态语法块和普通方法 哪一个会先被编译器所编译?

/** * 子类藏獒 */public class Mastiff extends Dog {public Mastiff() {System.out.println("Mastiff");}{System.out.println("block");}static {System.out.println("static block");}public static void  main(String[] args){Mastiff mastiff=new Mastiff();}}

/ **DOG父类 */  public class Dog {      public Dog() {          System.out.println("Dog");      }  }  

运行结果为:

static block
Dog
block
Mastiff

 

也就是说,在我们的程序中,实例化一个类对象的时候,运行顺序为:

  1.   静态块
  2.   父类构造器
  3.   本类中的块
  4.   本类的构造器 

想一想,如果父类中也有块和静态语法块呢?

/** *DOG父类 */public class Dog {public Dog() {System.out.println("Dog");}static{System.out.println("super static block");}{System.out.println("super block");}}<span style="color:#ff6600;"></span>
/**  * 子类藏獒  */  public class Mastiff extends Dog {      public Mastiff() {          System.out.println("Mastiff");      }        {          System.out.println("block");                }      static {          System.out.println("static block");      }            public static void  main(String[] args){          Mastiff mastiff=new Mastiff();            }  }  


运行的结果为:

super static block
static block
super block
Dog
block
Mastiff

 也就是说此时的运行顺序为:

  1.    父类静态块
  2.    自身静态块
  3.    父类块
  4.    父类构造器
  5.    自身块
  6.    自身构造器 
由此可见静态语法块最先执行,构造器则最后。

总结一下:静态语法块 ---> 语法块 --->构造器

那么,下面这段代码结果就为4


但是注意,如果没有初始化G g = new G(); 那么a = 3哦,这是因为编译器会记忆静态语法块的值。



java Object类

这个大家都知道,Object(对象)类是所有类的基类(父类)。那Object到底有哪些变量和方法呢?

没有变量,有一些方法,包括toString(

 private static native void registerNatives();

public final native Class<?> getClass();

 public native int hashCode();

public boolean equals(Object obj)

protected native Object clone() throws CloneNotSupportedException;

 public String toString() 

public final native void notify();

 public final native void notifyAll();

public final native void wait(long timeout) throws InterruptedException;

 public final void wait(long timeout, int nanos) throws InterruptedException

public final void wait() throws InterruptedException 

protected void finalize() throws Throwable { }

发现这个问题,按照下面的问题看看源码就好了,



eclipse如何关联java源码

这个要清楚一点,源码在哪里,只要你安装了jdk,这个目录下就有源码,一般是zip或jar文件。名字一般叫src。一般在C:\Program Files\Java\jdk1.8.0_45目录下。(1.8.0_45版本号可能不同)


当你按住ctrl键,鼠标点击类的时候会跳转到此类初次定义的地方,但是可能会看到如下画面。

这就是没有关联源码,点击Attach Source按钮,选择External location 关联图1的src文件点击确定就可以了。









1 0
原创粉丝点击