JAVA基础四(自动装箱,常量池;try catch finally,try里有return,finally还执行吗;JAVA多态的实现原理,java反射的作用与原理;泛型常用特点)

一、三级目录自动装箱在jdk1.5之前,如果你要定义一个value为100的Integer对象则需要如下定义:

Integer i = new Integer(100);

int intNum1=100;//普通变量
Integer intNum2 = intNum1;//自动装箱
int intNum3 = intNum2;//自动拆箱
Integer intNum4 = 100;//自动装箱

上面的代码中,intNum2为一个Integer类型的实例,intNum1为Java中的基础数据类型,将intNum1赋值给intNum2便是自动装箱;而将intNum2赋值给intNum3则是自动拆箱。
八中基本数据类型:boolean,byet,short,char,int,long,float,double,所生成的变量相当于常量。
基本类型包装类:Boolean,Byte,Character,Short,Integer,Long,Float,Double。
自动拆箱和自动装箱的定义:
自动装箱是将一个java定义的基本数据类型赋值给相对应封装类的变量。拆箱与装箱是相反的操作,自动拆箱则是将一个封装类的变量赋值给相应基本数据类型的变量。

二 、try catch finally,try里有return,finally还执行吗

肯定会执行,finally{}块的代码。只有在trt{}块中包含遇到System.exit(0)。之类的导致Java虚拟机直接退出的语句才会不执行。

当程序执行try{}遇到return时,程序会限制性return语句,但并不会立即返回,也就是把return语句要做的一切事情都准备好,也就是在将要返回,但并未返回的时候,程序吧执行流程转去执行finally块,当finally块执行完成后就直接返回刚才return语句已经准备好的结果

三、 JAVA多态的实现原理

多态的概念:同一操作作用于不同对象,可以有不同的解释,有不同的执行结果,这就是多态,简单来说就是:父类的引用指向子类对象

动态绑定具体的调用过程为:
1、首先会找到被调用方法所属类的全限定名
2、在此类的方法表中寻找被调用方法,如果找到,会将方法表中此方法的索引项记录到常量池中(这个过程叫常量池解析),如果没有,编译失败
3、根据具体实例化的对象找到方法区中此对象的方法表,再找到方法表中的被调用方法,最后通过直接地址找到字节码所在的内存空间

最后说明

域和静态方法都是不具有多态性的,任何的域访问操作都将由编译器解析,因此不是多态的。静态方法是跟类,而并非单个对象相关联的。

四、java反射的作用与原理

什么是java的反射

java反射是可以让我们在运行的时,通过一个类的Class对象来获取它获取类的方法、属性、父类、接口等类的内部信息的机制

这种动态获取信息以及动态调用对象的方法的功能称为java的反射

反射的作用

反射就是:在任意一个方法里

1.如果我知道一个类的名称/或者它的一个实例对象,我就能把这个类的所有方法和变量的信息找出来,方法名,变量名,方法,修饰符,类型,方法参数等所有信息

2.如果我还能明确知道这个类里某个变量的名称,我还能得到这个变量当前的值

3.当然,如果我明确知道这个类里的某个方法名+参数个数类型,我还能通过传递参数来运行那个类里的那个方法。

反射机制主要提供了以下功能

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法
  • 生成动态代理

反射的原理

java语言编译之后辉生成一个.class文件,反射就是通过字节码文件找到某一个类、类中的方法以及属性等

反射的实现API有哪些

反射的实现主要借助一下四个类
Class:类的对象
Constructor:类的构造方法
Field:类中的属性对象
Method:类中的方法对象

五、泛型常用特点

List< String >能否转为List< Object >

不可强转类型的

这个问题涉及到了,泛型向上转型和泛型向下转型问题,List向上转换至List会丢失String类的身份(String类型的特有接口)。当需要由List向下转型时,你的程序必须明确的知道将对象转换成何种具体类型,不然这将是不安全的操作

如果要强转类型,Json序列化转型

List<String> str = new ArrayList<String>();
List(Object) obj= JSONObject.parseArray(JSONObject.toJSONString(str);

或者遍历,或者克隆,但是取出来就是(Object)了,需要强转,String因为类型丢了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值