java隐式
Ⅰ java中什么是显式类型转换和隐式类型转换
自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以Java语言在设计时,没有为该操作设计语法,而是由JVM自动完成。
转换规则
从存储范围小的类型到存储范围大的类型。
具体规则为:
byte→short(char)→int→long→float→double
也就是说byte类型的变量可以自动转换为short类型,示例代码:
byte b = 10;
short sh = b;
这里在赋值时,JVM首先将b的值转换为short类型,然后再赋值给sh。
在类型转换时可以跳跃。示例代码:
byte b1 = 100;
int n = b1;
l 注意问题
在整数之间进行类型转换时,数值不发生改变,而将整数类型,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失。
强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。
转换规则
从存储范围大的类型到存储范围小的类型。
具体规则为:
double→float→long→int→short(char)→byte
语法格式为:
(转换到的类型)需要转换的值
示例代码:
double d = 3.10;
int n = (int)d;
这里将double类型的变量d强制转换成int类型,然后赋值给变量n。需要说明的是小数强制转换为整数,采用的是“去1法”,也就是无条件的舍弃小数点的所有数字,则以上转换出的结果是3。整数强制转换为整数时取数字的低位,例如int类型的变量转换为byte类型时,则只去int类型的低8位(也就是最后一个字节)的值。
示例代码:
int n = 123;
byte b = (byte)n;
int m = 1234;
byte b1 = (byte)m;
则b的值还是123,而b1的值为-46。b1的计算方法如下:m的值转换为二进制是10011010010,取该数字低8位的值作为b1的值,则b1的二进制值是11010010,按照机器数的规定,最高位是符号位,1代表负数,在计算机中负数存储的是补码,则该负数的原码是10101110,该值就是十进制的-46。
l 注意问题
强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。
Ⅱ java中什么是显示调用和隐式调用
当我们在调用类的构造器来创建对象的时候,首先要调用的是父类的非静态的初始化块,接着会调用构造器,但是父类的构造器可能有多个,也就是重载,当调用完父类的非静态初始化块之后,将会调用的是当前类的非静态初始化块然后是自身的构造函数,调用父类的构造函数就有两种调用的方式,一个是显示调用,另一个是隐式调用,下面通过代码来说一下这两者间的区别。
class Person {
public Person (){}
public Person (String name){
system.out.println(name);
}
}
class Student extends Person {
public Student{
super ("hello world");
}
public Student{
this();
}
public Student{
}
}
了解了这段代码的输出情况,你也就是了解了显示调用和隐式调用,这里出现的关键字super,super调用用于显示调用父类的构造器,this则用来显示调用本类中的另一个重载的构造器,这两种构造器只能在构造器中使用,而且出现在构造函数的第一行代码中,因此构造器中两种关键字只能用其中一个,而且每个只能调用一次。
Ⅲ java中 显式和隐式的操作具体是怎么回事 什么叫做显式,什么叫做隐式
什么显式隐式操作,你是说变量类型的显式和隐式转换吧
显式转换:就是要你自己明确写出来,比如说把人转化为男人
隐式转换:就是不需要你自己明确标明,Java虚拟机默认就可以转的,比如要把男人转化为人
Ⅳ java 的+=的隐式转换
从左到右转都是隐式转换的,虚拟机自动帮你办到,反过来就是强制转型,但是会有丢失精度的可能。
Ⅳ 关于java中的隐式调用问题
这是因为System.out.println这个方法可以打印出任何对象或者数据类型的关系
他可以打印出8种基本类型和对象,基本类型就不说了,如果他发现参数为对象的话,会自动调用该对象的toString()方法进行打印,这也就是所谓的隐士调用了。
你的R1,R2是对象,所以他会选择该对象中的toString()方法,然后打印,toString()是由Object类派生的,所以任何对象都拥有这个方法
Ⅵ 在JAVA中什么是隐式对象
http://..com/question/88628930.html?fr=qrl&cid=870&index=1&fr2=query
Ⅶ java里隐式继承说的是什么
java中的继承,子类可以从父类继承所有的属性和方法,无论访问修饰符是private或是其他,都会被子类继承,但是因为访问修饰符的限制,导致在子类中无法直接访问到继承过来的private属性和方法
Ⅷ java的类初始化,隐式,显示,什么意思
1.Java对象何时被初始化
Java对象在其被创建时初始化,在Java代码中,有两种行为可以引起对象的创建。其中比较直观的一种,也就是通常所说的显式对象创建,就是通过new关键字来调用一个类的构造函数,通过构造函数来创建一个对象,这种方式在java规范中被称为“由执行类实例创建表达式而引起的对象创建”。
当然,除了显式地创建对象,以下的几种行为也会引起对象的创建,但是并不是通过new关键字来完成的,因此被称作隐式对象创建,他们分别是:
● 加载一个包含String字面量的类或者接口会引起一个新的String对象被创建,除非包含相同字面量的String对象已经存在与虚拟机内了(JVM会在内存中会为所有碰到String字面量维护一份列表,程序中使用的相同字面量都会指向同一个String对象)
●自动装箱机制可能会引起一个原子类型的包装类对象被创建;
●String连接符也可能会引起新的String或者StringBuilder对象被创建,同时还可能引起原子类型的包装对象被创建,比如(本人试了下,在mac ox下1.6.0_29版本的javac,对待下面的代码会通过StringBuilder来完成字符串的连接,并没有将i包装成Integer,因为StringBuilder的append方法有一个重载,其方法参数是int);
2.Java如何初始化对象
当一个对象被创建之后,虚拟机会为其分配内存,主要用来存放对象的实例变量及其从超类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值。
上面的代码中,Foo和Bar中都定义了变量i,在main方法中,我们用Foo引用一个Bar对象,如果实例变量与方法一样,允许被覆盖,那么打印的结果应该是1,但是实际的结果确是0。
但是如果我们在Bar的方法中直接使用i,那么用的会是Bar对象自己定义的实例变量i,这就是隐藏,Bar对象中的i把Foo对象中的i给隐藏了,这条规则对于静态变量同样适用。
在内存分配完成之后,java的虚拟机就会开始对新创建的对象执行初始化操作,因为java规范要求在一个对象的引用可见之前需要对其进行初始化。在Java中,三种执行对象初始化的结构,分别是实例初始化器、实例变量初始化器以及构造函数。
http://www..com/s?wd=52014085078
Ⅸ java中隐式参数的含义是什么
要知道隐式参数,就要先知道显式参数,显式参数很容易理解,就是方法中明确定义的参数。
那么隐式参数就是未在方法是定义的,但的确又动态影响到程序运行的“参数”。一类就是this引用。
比如
int s=0;
compute(int i){
s+=i;
}
虽然调用该方法时只传递了参数i,但实际执行的是this.s+=i。这个this就是隐式的了。其他还有对象引用、类等,道理是一样的,就不再赘述了。
Ⅹ java中的九大隐式对象
application---所有用户和整个服务器都可访问
session---当前用户登录有效
request---一次请求有效,通常在2个JSP中有效
pageContext---当前用户一个JSP页面有效
response 响应请求
out 输出内容
page 相当于JAVA中的this
config 初始化的配置文件(web.xml)访问对象
exception JSP中的异常处理