java第六周练习题

1:float f=3.4;是否正确?

不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F。

2:short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;+=操作符会进行隐式自动类型转换,是 Java 语言规定的运算符;Java编译器会对它进行特殊处理,因此可以正确编译。因为s1+= 1;相当于s1 = (short)(s1 + 1)。

3:下列代码运行结果是什么

public class Test03 {
 public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;        
        System.out.println(f1 == f2);
        System.out.println(f3 == f4);}}

f1f2的结果是true,而f3f4的结果是false。
(原因是当数值在-128~127之间的时候,该值因为经常使用,所有是被放在一个常量池中,所有创建的f1和f1对象指向的都是这一个值,所有相等,而不再这个范围的,会new一个对象,存在堆中,所有f3和f4都是不同的对象,地址不同)

4:什么是多态,为什么要用多态?

1:多态是在继承的前提下产生的一个观念,多态是指父类的声明指向了子类的实例化对象。
1:灵活性 实现了参数的统一化(方法可以接收任意的子类对象)。
2:在声明的时候我们不需要去考虑具体实例化的对象是哪一个(框架讲解)
3:可扩展性 新增子类或实现类不影响之前的子类以及实现类
4:可替换性 若将子类对象A替换成子类对象B不影响程序的运行

5:switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

6:数组有没有length()方法?String有没有length()方法?

数组没有length()方法,有length 的属性,String有length()方法

7:构造器(constructor)是否可被重写(override)?

构造器不能被继承,因此不能被重写,但可以被重载。

8:是否可以继承String类?

String 类是final类,不可以被继承。

9:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。

10:String和StringBuilder、StringBuffer的区别?

Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,线程不安全,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

11:重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。

12:char 型变量中能不能存贮一个中文汉字,为什么?

char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16比特),所以放一个中文是没问题的。

13:抽象类(abstract class)和接口(interface)有什么异同?

抽象类和接口都不能够实例化,
但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现
否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。

14:hashMap 与hashTable有什么区别

1:作者不同
2:诞生时间不同HashTable诞生于JDK1.0,HashMap诞生于JDK1.2
3:继承父类不同HashTable继承于Dictionary,HashMap继承于AbstractMap
4:对外提供的方法不一样,HashTable比HashMap多了两个方法,elements与contains方法。
5: key与value对null的支持不一样,HashTable不支持,HashMap支持。
6:线程安全不同HashTable安全,HashMap不安全
7:计算hash值的方式不同
8:初始容量不同HashTable的初始容量是11,每次扩容是2n+1,HashMap是16,每次扩容是2n(2倍)

15:如何解决hashMap安全问题?

1:使用同步锁修饰map对象
2:使用concurrentHasmMap

16:阐述静态变量和实例变量的区别?

静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。

17:说一下什么是自动拆箱,什么是自动装箱?

自动拆箱:是指引用数据类型(包装类)自动转换为基本数据类型
自动装箱:只是基本数据类型自动转换为引用数据类型(包装类)

18:String s = new String(“xyz”);创建了几个字符串对象?

两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象。

19:接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。

20:一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?

可以,但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致。

21:三层架构是哪三层?

视图层(表现层),业务层,持久层(数据层)

22:指出下面程序的运行结果。

class A {
 static {   System.out.print("1"); }
  public A() { System.out.print("2"); }}
class B extends A{
  static {   System.out.print("a");}
    public B() {     System.out.print("b");  }}
public class Hello {  public static void main(String[] args) {
        A ab = new B();
        ab = new B(); }}

执行结果:1a2b2b。创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。

23:如何将基本数据类型转换为字符串

调用String 类中的valueOf()方法返回相应字符串

24:如何格式化日期?

利用java.text.DataFormat 的子类(如SimpleDateFormat类)中的format(Date)方法可将日期格式化。Java 8中可以用java.time.format.DateTimeFormatter来格式化时间日期

SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
        Date date1 = new Date();
        System.out.println(oldFormatter.format(date1));

        // Java 8
        DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        LocalDate date2 = LocalDate.now();
        System.out.println(date2.format(newFormatter));

25:简述Java’的各个代码块及用处与区别

• 普通代码块:普通代码块是定义在方法之中的代码块,几乎用不到的。
• 构造块:构造块是定义在类之中的代码块。
• 静态块:静态块也是定义在类之中的,如果一个构造块上使用了static关键字进行定义的话,那么就表示静态块,但是静态块要考虑两种情况:在非主类之中定义的静态块;在主类中定义的静态块。
• 同步块:被同步块修饰的方法或代码只能同时允许一个线程执行。

JDBC:(30分)

1: 说下mysql的事务特性,以及隔离级别,每种级别都能隔离什么(10)

数据库中的事务四大特性:
1:原子性 不能再分割,要么一起成功,要么一起失败。
2:一致性 指数据从一个状态一起变成另外一个状态(数据的完整性没有被破坏)
3:持久性 将改变的数据持久化到本地储存,
4:隔离性 每一个事务都是独立的,不应该干扰到其他事务
1: READ UNCOMMITTED 读未提交 会引发脏读(A读到B没提交的数据)
2: READ COMMITTED 读已提交 防止了脏读,无法防止不可重复读(两次查询结果结果不一致)
3: REPEATABLE READ 可重复读(mysql默认) 防止了脏读,不可重复读,防止幻读
不可重复读: A在读取数据的时候 B修改了数据被A看见了
幻读(虚读): A在读取数据的时候 B增加数据被A看见了

4: SERIALIZABLE 串行化 相当于给表加了锁,如果B想操作表,必须要等A提交之后。

2: 说下JDBC链接数据库查询的步骤(10)

1:通过url,username,password获得数据库连接对象
2:获得执行sql的预编译对象PreparedStatement
3:向占位符中传入参数
4:执行sql接收结果集resultSet对象
5:解析结果集

3: 说下Statement与PreparedStatement的区别(5)

Statement的缺点:
1:接收到的参数只能使用字符串拼接方式拼接上,非常麻烦。
2: 会引出sql注入
3:执行的时候才将sql发送到数据库,执行速度慢
sql注入:用户在输入内容的时候,输入一些数据库关键字改变了原本的sql。
解决方案:
PreparedStatement(预编译对象)
1:使用占位符+传参方式 将接收的参数传递到sql中,不需要手动拼接字符串。
2:会自动给参数加上’’,解决了sql注入的问题
3:由于在获得对象的时候sql就已经开始编译,执行速度快。

4:什么是JDBC,为什么不需要加载驱动(5)

JAVA DATABASES connectivity Java数据库连接
JDBC4.0之后的版本会自动加载驱动,不需要我们手动加载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值