Java基础知识点巩固学习

1.方法重载overload是实现编译时的多态性。方法重写override是实现运行时的多态性。

2.char型占两个字节,并且Java中使用的Unicode编码,所以char型可以存放一个汉字。

3.抽象方法不可以是静态的,因为抽象方法要被重写实现,而静态方法不允许被重写。

4.抽象方法不可以是native本地方法,因为本地方法是由C语言写好的方法,而抽象方法是未实现的方法。

5.抽象方法不可以被synchronized修饰的,因为锁涉及方法的内部实现细节,而抽象方法没有方法体。

6.内存泄漏:一般来说,一些已经用不到的对象会被JVM的GC回收掉,但是有时候会出现一些无用但可达的对象,他们不会被GC回收掉,就会导致内存泄漏。比如hibernate一级缓存中的对象。

7.lock和synchronized的区别:lock可以完成synchronized的所有功能,但是lock必须要手动释放锁,并且最好再finally语句块中释放。

8.PreparedStatement的好处:①防止sql语句注入攻击,比如select count(*) from usertable where name='用 户 名 ' and pswd='密码 ',如果在用户名字段中输入 ' or '1'='1' or '1'='1或是在密码字段中输 入 1' or '1'='1将绕过验证 ,但这种手段只对Statement有效,对PreparedStatement 无效。②③当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)。因为preparedstatement方法执行完后,sql语句会发送给数据库,数据库会对sql进行预编译,预编译后的sql语句的结构是不能改变的。预编译就是数据库会对sql的结构进行编译,但是不是真正上的编译得到结果集。③可以批处理sql语句提升更新数据的性能。比如:

pstm = con.prepareStatement("insert into student values(?,?,?,?)");     
            con.setAutoCommit(false);//首先把Auto commit设置为false,不让它自动提交     
            // 设置sql语句1     
            pstm.setInt(1, 33);     
            pstm.setString(2,"wangqin");     
            pstm.setString(3, "c++");     
            pstm.setDouble(4, 78.5);     
            // 将一组参数添加到此 PreparedStatement 对象的批处理命令中。     
            pstm.addBatch();     
            // 设置sql语句2     
            pstm.setInt(1, 34);     
            pstm.setString(2,"wuytun");     
            pstm.setString(3, "c");     
            pstm.setDouble(4, 77); 
            // 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。     
            pstm.executeBatch();     
            System.out.println("插入成功!");     
            // 若成功执行完所有的插入操作,则正常结束     
            con.commit();//进行手动提交(commit)     
            System.out.println("提交成功!");     
            con.setAutoCommit(true);//提交完成后回复现场将Auto commit,还原为true, 

 

你可能感兴趣的:(java,java,web)