float f=3.4;
是否正确?
不正确。
在 java 中,这里的 3.4
默认是双精度数。如果将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f = (float) 3.4
或者写成 float f = 3.4F
。
&
和 &&
的区别?&
运算符对布尔型时是“逻辑与运算符”,对其它类型时是“按位与运算符”;&&
运算符只能是逻辑与运算符。&
运算符在运算时两边都会计算,然后再判断;&&
运算符是短路与运算,如果 &&
左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。不可以。
当一个 static 方法被调用时,可能还没有创建任何实例对象,如果从一个 static 方法中发出对非 static 方法的调用,那么非 static 方法就无法关联到一个对象上。
int 是 java 提供的 8 种原始数据类型之一,Integer 是 java 为 int 提供的封装类。int 的默认值为 0,而 Integer 的默认值为 null,即 Integer 可以区分出未赋值和值为 0 的区别,int 则无法表达出未赋值的情况。
在 JSP 开发中,Integer 的默认为 null,所以用 el 表达式在文本框中显示时,值为空白字符串,而 int 默认的默认值为 0,所以用 el 表达式在文本框中显示时,结果为 0,所以,int 不适合作为 web 层的表单数据的类型。
在 Hibernate 中,如果将 OID 定义为 Integer 类型,那么 Hibernate 就可以根据其值是否为 null 而判断一个对象是否是临时的,如果将 OID 定义为了 int 类型,还需要在 hbm 映射文件中设置其 unsaved-value 属性为 0。
String s="a"+"b"+"c"+"d";
这行代码被编译器在编译时优化后,相当于直接定义了一个 ”abcd” 的字符串;所以,上面的代码只涉及到了一个在字符串池的对象,s 保存的是这个对象的引用地址。
String a = new String("ab");String b = a + "cd";
涉及到几个 String 对象?涉及到 4 个。
其中 new String("ab")
涉及到两个,分别在堆内存和字符串常量池;"cd" 一个在字符串常量池,"abcd" 一个在字符串常量池。
Java 设计了两种不同的方法来生成字符串对象,一种是使用双引号,一种是调用 String 类的构造函数。
当使用双引号定义对象时,Java 环境首先去字符串缓冲池寻找内容相同的字符串,如果存在就拿出来使用,否则就创建一个新的字符串放在缓冲池中。
当调用 String 类的构造函数,即用 new String()
创建时,它会在运行期创建一个对象存在堆内存中,然后其堆内存的值指向字符串常量池的一个字符串对象。
在字符串的 "+" 连接中,如果有引用存在,而引用的值在程序编译期是无法确定的,所以 a + "cd" 无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给 b。所以 "cd" 在字符串常量池有一个对象,a + "cd" 会在运行期创建一个对象。
is-a
代表继承关系,如果 A is-a B,那么 B 就是 A 的父类;has-a
代表从属关系,如果 A has a B,那么 B 就是 A 的组成部分;like-a
代表组合关系,如果 A like a B,那么 B 就是 A 的接口。List<T>
与 List 的区别?两个都是 List 集合,但是一个为泛型,另一个为 Object 型;存放元素时,前者限定了其集合元素类型为 T,后者的集合的元素可以是任意类型;发生强制类型转换时,前者可以在编译期发现类型转换错误,后者会在运行期间报错。
Java 中的泛型,只在编译阶段有效。在编译之后程序会采取去泛型化的措施。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
1、首先加载要创建对象的父类,然后加载要创建对象的类。
2、在类及其父类被加载的同时会将静态成员进行加载;主要包括静态成员变量的初始化,静态代码块的执行;在加载时按代码的先后顺序进行。
3、需要的类加载完成后,开始创建对象;首先会加载类以及其父类的非静态的成员,主要包括非静态成员变量的初始化,非静态代码块(构造块)的执行;在加载时按代码的先后顺序进行。
4、最后执行构造器(构造方法体);构造器执行完毕,对象生成。
在安装好 JDK 并配置好 path 后开发运行步骤如下:
1、可以用任何文本编辑器创建并编辑 Java 源程序,Java 源程序用 “.java” 作为文件扩展名。
2、编译 Java 源程序,使用命令 “javac” 编译:javac 源程序文件名.java
。然后编译成 Java 虚拟机能够明白的指令集合,且以字节码的形式保存在文件中。通常,字节码文件以 “.class” 作为扩展名。
3、执行 java 程序,使用 “java” 命令运行字节码文件:java 文件名
。Java 虚拟机会读取字节码,取出指令并且翻译成计算机能执行的机器码,完成运行过程。