导航:首页 > 源码编译 > 对象类型转换java编译和运行

对象类型转换java编译和运行

发布时间:2024-11-28 01:11:42

A. java中,类的对象,对象的实例,对象的引用,三者如何进行区分,有何区别呢

没有“对象的实例”这种叫法,正确的叫法是“类的实例”。


没有学过java,给你说说我的理解吧!


在java和C++这类语言中,对象(对象和实例是同义词)实际上就是内存中的存储数据一块固定存储空间,并且对象还有一系列的操作这块存储空间的方法。


对象的引用相当于对象的名字,名字与对象本身的区别就好比你的名字和你本人的区别。java里使用对象只能通过引用的方式,基本数据类型的变量和CC++的变量规则一样。


如:

UserTypeut=newUserType();//ut是引用,实际的对象在内存里。
ut=newUserType();/*现在ut是另一个对象的引用,先前的对象被垃圾回收了(因为先前的对象不能被再次使用了)。*/
UserTypeut2;//定义了一个引用ut2,他不引用任何对象,不能使用。。。。
ut2=newUserType();//然ut2成为一个对象的引用。
UserTypeut3=newUserType();
UserTypeut4=newUserType();
ut3=ut4;//现在ut3引用ut4的对象,这里不是赋值。。。
inta=5;
intb=4;
a=b;//这里是赋值。ab依然引用不同的对象


类型转换就是把一种类型的对象当做另一种类型的对象来使用。一些类型转换会自动发生,另一些需要强制类型转换,强制一般都会出问题,自动的也需要注意。


以上纯属个人理解,楼主慎读之。。。。

B. 在java中怎样将object转换int [编程]

class objectTOint{
public static void main(){
Object a = 4;
int b =1;
if( b > (Integer)a)
System.out.print("success.");
}
}
我比较懒,这种方法最简单,反正你只要比较就可以了int是强类型,而Object是弱类型,既然不能从强类型转成弱类型,那就转成Integer也就是冲誉整型的强类型就好了。值得提的粗或是JDK 6完成了自动装箱、解箱也岩判伍就是说,你要是用JDK 6就可以实现Object转int了。

C. Java编译时注解和运行时注解有什么区别

重写,重载,泛型,分别是在运行时还是编译时执行的

1. 方法重载是在编译时执行的,因为,在编译的时候,如果调用了一个重载的方法,那么编译时必须确定他调用的方法是哪个。如:

当调用evaluate("hello")时候,我们在编译时就可以确定他调用的method #1.

2.
方法的重写是在运行时进行的。这个也常被称为运行时多态的体现。编译器是没有办法知道它调用的到底是那个方法,相反的,只有在jvm执行过程中,才知晓到底是父子类中的哪个方法被调用了当有如下一个接口的时候,我们是无法确定到底是调用父类还是子类的方法

3.
泛型(类型检测),这个发生在编译时。编译器会在编译时对泛型类型进行检测,并吧他重写成实际的对象类型(非泛型代码),这样就可以被JVM执行了。这个过程被称为"类型擦除"。

类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且再必要的时候添加类型检查和类型转换的方法。

类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。类型擦除的主要过程如下:

1). 将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。

2). 移除所有的类型参数。

在编译后变成:

4. 注解。注解即有可能是运行时也有可能是编译时。

如java中的@Override注解就是典型的编译时注解,他会在编译时会检查一些简单的如拼写的错误(与父类方法不相同)等

同样的@Test注解是junit框架的注解,他是一个运行时注解,他可以在运行时动态的配置相关信息如timeout等。

5. 异常。异常即有可能是运行时异常,也有可能是编译时异常。

RuntimeException是一个用于指示编译器不需要检查的异常。RuntimeException
是在jvm运行过程中抛出异常的父类。对于运行时异常是不需要再方法中显示的捕获或者处理的。

已检查的异常是被编译器在编译时候已经检查过的异常,这些异常需要在try/catch块中处理的异常。

6. AOP. Aspects能够在编译时,预编译时以及运行时使用。

1).
编译时:当你拥有源码的时候,AOP编译器(AspectJ编译器)能够编译源码并生成编织后的class。这些编织进入的额外功能是在编译时放进去的。

2). 预编译时:织入过程有时候也叫二进制织入,它是用来织入到哪些已经存在的class文件或者jar中的。

3). 运行时:当被织入的对象已经被加载如jvm中后,可以动态的织入到这些类中一些信息。

7. 继承:继承是编译时执行的,它是静态的。这个过程编译后就已经确定

8. 代理(delegate):也称动态代理,是在运行时执行。

D. java类型转换错误

通常使用强制类型转换将父类型转换成子类型时,是不会有编译错误的,只会有运行时抛出ClassCast的异常,如果编译提示错误,那肯定是因为你转换的时候类型就匹配,被转换的对象和目标类型不是子父类/接口实现类的关系,自然编译不通过

E. Java中对象类型转换原则有哪些

Java数据类型的转换原则

从低精度向高精度转换
byte 、short、int、long、float、double、char
注:两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换

基本类型向类类型转换

正向转换:通过类包装器来new出一个新的类类型的变量
Integer a= new Integer(2);
反向转换:通过类包装器来转换
int b=a.intValue();

类类型向字符串转换

正向转换:因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可
反向转换:通过类包装器new出一个新的类类型的变量
eg1: int i=Integer.valueOf(“123”).intValue()
说明:上例是将一个字符串转化成一个Integer对象,然后再调用这个对象的intValue()方法返回其对应的int数值。
eg2: float f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doubleValue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
eg5: long l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
eg6: char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。

F. Java什么情况下强转型 编译不报错,运行会报错

向下强制转型——把一个父类(或祖先类)引用强制转换成一个子类(或孙类)引用,是不会发生编译错误的。

但如果这个父类(或祖先类)引用实际引用(指向)的对象,不是一个子类(或孙类)对象,运行时就会抛出异常。

举例来说,如果鸟类和狗类都是动物类的子类。

如果有一个动物类的引用a引用了一个鸟类对象,则此时将a强制转换成狗类引用,就不会报编译错误,但运行时会抛出类型转换异常。

因为a这个装动物的笼子,实际上关的是一只鸟,而需要的动物是一只狗。

阅读全文

与对象类型转换java编译和运行相关的资料

热点内容
编程15个好习惯 浏览:671
电脑u盘文件夹显示屏幕保护程序 浏览:797
我的世界服务器版本怎么下载 浏览:600
c代码加密工具 浏览:355
使用泛型算法的错误 浏览:737
单片机焊接要焊接多少个引脚 浏览:669
android图片浏览器代码 浏览:705
中国电信智慧维app如何使用 浏览:701
打印文件夹内文件如何统一设置 浏览:553
单片机连接8个按键 浏览:656
阿里云服务器网页怎么找到 浏览:958
数控车床如何进行自动编程 浏览:11
app网课视频怎么拷贝到电脑上 浏览:710
安卓国服光遇小王子季节什么时候结束 浏览:537
恢复的音乐在哪个文件夹 浏览:595
qq传输文件夹压缩包 浏览:911
sha1加密算法java 浏览:233
单片机ds1302程序 浏览:738
杜比压缩开还是关怎样判断 浏览:366
对象类型转换java编译和运行 浏览:285