学校学的知识因为不理解,所以我一直处于一知半解的状态。现在在闲暇之余,抽空看一下基础内容,获益匪浅。首先说一下java语言涉及最多的单词class,class是一种类型,指的是“类”,就像超类 public class object{},所以不明白class和object区别的我,现在终于能够理解了。
之后再说一下模糊不清的一些概念,interface是什么?是继承于object吗?我去网上查了一下资料,包括别人的一些描述,总共有2个观点:
1、接口继承于object
接口继承了Object类,在.class文件中的super_class标志中可以看到,另外《深入java虚拟机》第二版以及《The Java Virtual Machine Specification》second edition中有说到
2、接口是接口,类是类。
"接口隐含定义了一套与Object类中的方法签名完全相同的方法,所以,我们在程序中调用接口的那些与Object中具有相同签名的方法时,编译器不会报错!"
我个人倾向于更容易理解的第二种,可能也是受类声明方式不一样的影响:interface **{} class **{}
除了这些平时只靠死记硬背,没有深入了解的东西外,还有诸如泛型之类的:
T 和object的区别:T指的是具体的一种class类,而object则可以容纳所有类型的类。如同:List<T>和List<object>,2者中T可以为某一特定类,而object则涵盖了所有类。如下:
public static void main(String args[]){
List<object> list= new ArrayList<Object>();
int i=0;
String s="String";
list.add(i);
list.add(s);
}
List本身是个泛型类,现在我们指定它接收Object类型的参数,此时就可以放置任意类型的参数进去,而在取出来是就必须得进行强制类型转换成具体的类型。
现在我们如果将List指定接收String类型的参数,那么这个List就只能放置String类型,且取出来时就不用进行强制类型转换。而T就相当于这里的String。
其次比较容易模糊的是class<? extends **>**类以及 class<?>在这里?是一个占位符的作用,当没有后面的“extends **”时,他指代的是任意一种类,可以是object类,也可以是其他类包括其他接口。具体的话希望大家可以看一下http://blog.csdn.net/jitianxia68/article/details/73610606,这篇博客写的很清楚。
还有大家需要明白一点。T代表的是**.class。而如果将其作为返回类型,则应该返回的是**类型。例如:T如果代表的是int.class,那么其返回的类型为int。还有就是int.class和integer.class不是一样的,因为integer是int的封装类型,2者并不等同。