答:不正确,编译无法通过。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4
; 或者写成float f =3.4F;
。(相关阅读:java"小心机"(1)【资源彩蛋!】第4点类型转换)
例1:short s1 = 1; s1 = s1 + 1;有错吗?
例2:short s1 = 1; s1 += 1;有错吗?
public class ReturnInTry {
public static void main(String[] args){
System.out.println(test());
}
static public String test(){
String str = "return1";
try{
return str;
}finally {
str = "return2";
System.out.println("finally");
}
}
}
输出:
finally
return1
由此可见,finally代码块中的代码会在return语句前执行,但为什么finally代码块中的str = "return2";
未生效呢?
其实它这样执行的:当try中含有return语句且存在finally代码块,return语句不会立刻返回而是记录下该返回值
(存在某个地方),待finally代码块执行完毕后再返回该值
,所以在finally代码块中无法改变return的返回值。
public class ThisTest {
public ThisTest retutrnThis(){
//this相当于是指向当前对象本身
//返回对象本身
return this;
}
}
2.形参与成员名字重名时,用this来区分
public class ThisTest {
private String name;
public void ThisTest (String test){
this.test = test;
}
}
3.引用构造函数
public class ThisTest {
private String name;
private int count;
public void ThisTest (String test){
this.test = test;
}
public void ThisTest (String test,int count){
//调用另一个构造函数
//只能在第一行调用,且只能调用一次
this.ThisTest(test);
this.count = count;
}
}
当前对象本身
,super指向的是当前调用对象的父类
。子类创建对象时调用构造函数,会隐式调用
父类的无参构造方法
,创建一个子类对象的同时,该子类对象
还包含了一个父类对象
。该父类对象在子类对象内部(super指向该对象)。public class Father {
public String name;
public Father(String name) {
this.name = name;
}
}
public class Son extends Father{
public Son(String name) {
//必须调用,否则他会默认调用父类的无参构造函数,
//而父类的无参构造函数已经被有参的覆盖,所以找不到
super(name);
}
}
2.子类重写了父类的方法,又想用父类该方法时
class Parents{
Public Parents(){}
public void write(){
System.out.println("Parents");
}
}
class Children extends Parents{
Public Children(){}
public void write(){
System.out.println("Children");
super.write();//调用父类的write方法
}
}