Java基础知识总结

抽象类:用abstract修饰的类,抽象类不能被实例化,即不能new成一个对象。 抽象方法:abstract修饰的方法。只有申明,没有实现(没有{},若有{}但里面是空的,这也算实现了,叫做空实现)。 抽象类中并不一定要全是抽象方法,也可以写实现方法。

 

接口(interface):一种特殊的抽象类,所有方法都是抽象的。 定义类的规范, 实现该接口的类便要遵守接口所定的规则。 接口中定义的的变量必须初始化,默认类型为public static final(也就是常量了),接口中的方法都是抽象方法,默认类型为public abstract。 接口可以继承另一个接口,但接口不能实现另一个接口。 一个类可以实现多个接口,但只能继承一个类。(多实现,单继承) 接口和抽象类的区别:接口是特殊的抽象类,抽象类中的方法并不一定全是抽象方法,而接口中的方法一定得是抽象的。 接口不可以实例化。

 

抽象类和接口的异同:   都是一种抽象的约束,或者说规范。   都不能实例化。   里面都可以放抽象方法。不过接口要求必须全是抽象方法。   抽象类的本质是类,它只能被单继承;而接口可以被多实现(一个类可以实现多个接口)

 

多态:对象存在多种状态。乌鸦既是鸟类型,又是动物类型,还可以是生物类型。 Student stu = new Student(); stu它既可以是Student类型的,当然也它同时也是People类型的。

向上转型:Student当然也是People类型的,(乌鸦一定是鸟类,动物,生物) People stu = new Student();

向下转型:(要强制类型转换) People stu = new Student(); Student stu1 = (Student)stu;

 

final : 终态。表示固定的形态,不能被修改扩展

当它修饰类时,表示该类不能被继承拓展; 修饰方法时,表示该方法不能被子类中的方法覆盖(重写); 修饰变量时,表示常量。

 

static : 静态。static可以修饰变量,方法,代码块等。 普通情况下,每new出来的一个对象,都会在内存中被分配一小块空间存储它,但被static修饰的成员变量,是属于整个类的,它存储在内存中的一个共享区域,所有对象共同使用唯一一份静态的成员变量。() 静态成员变量和静态方法都可以直接用 类名.成员变量名 类名.方法

 

String类 : String是常量,其对象一旦创建就不能被改变。那些看起来会修改String值的方法,其实都是创建了一个全新的String。 String通过+可以拼接其他东西,并默默地把人家的数据类型转换为String类型,拼接后的String是一个全新的String对象。 与之相反的是StringBuffer,它可以通过append()拼接。 StringBuffer和String的主要区别就是StringBuffer创建的对象的值可以改变,而String的对象的值一旦创建便不能再变。

对象的两种创建方式:

  String str1 = new String("aaa");

  String str2 = new String("aaa");  

这是两个对象,只要new,就会创建一个对象。 

   String str1 = "aaa";

   String str2 = "aaa";

同一个对象。 具体解释见:http://www.cnblogs.com/mengdd/archive/2013/01/03/2842846.html    

数组(Array):相同数据类型的集合。  定义数组的几种方式:   int[] array = new int[10];   int array[] = new int[10];   int[] a = {1,2,3,4};   int[] a = new int[]{1,2,3,4};

 

集合(collection):把多个元素组成一个单元。集合中不能存放基本类型的数据,要存它的包装类的对象,即集合中只能存放对象。  以前,编译器的数据类型是Object,当插入对象时,无论对象的类型是什么都是没问题的,但是当get时,它对所有对象的返回类型都是Object,显然,这样是有问题的。 为了避免出现这样的错误,我们可以用尖括号里规定该集合存储的特定数据类型。List<String>

 以前,把对象放入集合后,它的类型都是Object类型的。

  List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。

  Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。

  Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。

  TreeSet要求放入其中的数据是可比较的。

ArrayList和LinkedList的比较:   

  ArrayList的底层数据结构是数组,执行搜索操作效率较高;

    LinkedList的底层数据结构是双链表,插入,删除效率很高。

      如果ArrayList插入或删除一条数据,那么该数据插入点或删除点后的数据都要移动,低效率。 

      HashSet的底层是用HashMap实现的。HashMap是key存储HashSet添加的对象,而value都是一个统一的对象(和我们无关)。

      HashMap的底层数据结构是数组。

Array和ArrayList的区别: 集合(ArrayList)只能保存对象,而数组既能保存基本类型的数据也能保存对象。

两种遍历集合的方式:

   Iterator:迭代器。首先集合获取一个迭代器,然后迭代器里通常用hasNext(),next() 

   foreach:

泛型:所谓泛型,就是变量类型的参数化。有程序员指定集合只能容纳的数据类型,  以前,编译器的数据类型是Object,当插入对象时,无论对象的类型是什么都是没问题的,但是当get时,它对所有对象的返回类型都是Object,显然,这样是有问题的。 为了避免出现这样的错误,我们可以用尖括号里规定该集合存储的特定数据类型。List<String>

 

包装类 :8种基本数据类型,不是对象。为此Java里定义了8个对应的包装类,他们可以作为对象使用。  自动装箱和自动拆箱:    JDK1.5后,自动装箱:基本数据类型自动转换为包装类型;         自动拆箱:包装类型自动转换为基本数据类型。         

 

Java的反射机制:

   动态的(运行时)获取类的信息以及动态调用对象的方法的功能。  

   要想使用反射,首先需要获得待操作的类所对应的Class对象。

  Java中,无论生成某个类的多少个对象,这些对象都会对应于同一个Class对象。

  这个Class对象是由JVM生成的,通过它能够获悉整个类的结构。

获取Class对象常用的三种方法:  

  1.使用Class类的静态方法: Class.forName("。。。。");  

  2.使用对象的getClass()方法 : 对象.getClass();

  3.使用类的.class语法 : String.class;  

Class类 :   每个类在开始运行时,Class类都会通过类加载器生成一个该类的Class对象,里面存储了该类的信息。

 

Java IO流 :  字节流:InputStream,OutputStream 俩抽象类及下的子类  字符流:Reader,Writer 俩抽象类及以下的子类    在最底层,流其实都是字节形式的。

 

 

  

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。