容易混淆的java知识点

    学校学的知识因为不理解,所以我一直处于一知半解的状态。现在在闲暇之余,抽空看一下基础内容,获益匪浅。首先说一下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者并不等同。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值