牛客网错题本之JAVA_第二期
来源:互联网 发布:homer软件视频 编辑:程序博客网 时间:2024/04/30 12:17
1.ClassLoader
Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader
ClassLoader使用的是双亲委托模型来搜索类的
JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。
ClassLoader就是用来动态加载class文件到内存当中用的
2.面向对象五大基本原则
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。 开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。 Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。 依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。 接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口
3.Collection与Collections
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
Collection是单列集合的顶层接口,Map是双列集合的顶层接口Collections是一个集合的工具类,提供了排序、查找等操作集合的一些常用方法
4.位运算
>>为带符号右移,右移后左边的空位被填充为符号位>>>为不带符号右移,右移后左边的空位被填充为0没有<<< 因为<<后右边总是补0
5.内部类
静态内部类才能包含静态方法,并且静态方法中的参数必须也是静态,因为静态方法不能访问非静态成员变量
如果外部类是public类的话,内部类不能被定义为public
6.集合类默认大小
StringBuffer和StringBuilder的默认大小为16ArrayList和LinkedList的默认大小10
7.Java中的子类赋值给父类的引用
Base base=new Son(); 是多态的表示形式。父类对象调用了子类创建了Son对象。base调用的method()方法就是调用了子类重写的method()方法。而此时base还是属于Base对象,base调用methodB()时Base对象里没有这个方法,所以编译不通过。要想调用的话需要先通过SON son=(SON)base;强制转换,然后用son.methodB()调用就可以了。
8.HashMap
源码程序中用到了一个重要的内部接口:Map.Entry,每个 Map.Entry 其实就是一个 key-value 对。当系统决定存储 HashMap 中的 key-value 对时,完全没有考虑 Entry 中的 value,仅仅只是根据 key 来计算并决定每个 Entry 的存储位置。Entry是数组,数组中的每个元素上挂这个一条链表。。链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。很显然我们使用的不是开放地址法。
9.Java中的main方法
java中可以有多个重载的main方法,只有public static void main(String[] args){}是函数入口
Appletviewer.exe 就是用来解释执行java applet应用程序的,能被Appletviewer成功运行的java class文件没有main()方法
10.枚举类型
枚举类型中有几个数,其私有的构造方法就调用几次
11.抽象类与接口
抽象类中可以有构造方法,接口中不能有构造方法
java8中接口可以有default方法,所以现在来说接口中其实也是可以包含普通方法的
接口允许定义成员,但必须是常量。
抽象类中可以有普通成员变量,接口中不能有
抽象类中可以有静态方法,接口中不能有静态方法
12.Integer之间的数的比较
首先常量池这个概念,原来以为只要是一个整型,都会放进到常量池,比如,0,1,12222222等。查找后发现,Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127并且大于等于-128时才可使用常量池,因为他们至占用一个字节(-128~127);
给Integer直接赋值,例如Integer i = 42 其实就是执行了valueOf方法
两个不是new出来的Integer比较,如果在-128~127之间,就是相等,否则就是不相等
两个都是new出来的Integer比较,结果是不相等
int和Integer比较,肯定是相等,因为Integer会执行拆箱操作
13.JDBC
JDBC的设计模式用了桥接模式
14.Math.floor()
Math.floor(x) 返回小于等于x的最接近整数,类型为double
15.父类引用指向子类对象的问题
public class Base{ private String baseName = "base"; public Base() { callName(); } public void callName() { System. out. println(baseName); } static class Sub extends Base { private String baseName = "sub"; public void callName() { System. out. println (baseName) ; } } public static void main(String[] args) { Base b = new Sub(); }}new Sub();在创造派生类的过程中首先创建基类对象,然后才能创建派生类。创建基类即默认调用Base()方法,在方法中调用callName()方法,由于派生类中存在此方法,则被调用的callName()方法是派生类中的方法,此时派生类还未构造,所以变量baseName的值为null
16.Java中声明常量
需要用final关键字修饰,并且常量必须要在声明的同时进行赋值
17.Java中的前自增和后自增以及自增运算
public class test{static{ int x=5;}static int x,y;public static void main(String args[]){ x--; myMethod( ); System.out.println(x+y+ ++x);}public static void myMethod( ){ y=x++ + ++x; }}1.静态语句块中x为局部变量,不影响静态变量x的值2.x和y为静态变量,默认初始值为0,属于当前类,其值得改变会影响整个类运行。3.java中自增操作非原子性的 main方法中:执行x--后 x=-1调用myMethod方法,x执行x++结果为-1(后++),但x=0,++x结果1,x=1 ,则y=0x+y+ ++x,先执行x+y,结果为1,执行++x结果为2,得到最终结果为3
18.final修饰的类
fianl修饰的类是不能被继承的,其中不能包含abstract方法
19.Statement与PreparedStatement
Statement sta=con.createStatement();
ResultSet rst=sta.executeQuery(“select * from book”);
PreparedStatement pst=con.prepareStatement(“select * from book”);ResultSet rst=pst.executeQuery();
创建Statement是不传参的,PreparedStatement是需要传入sql语句
在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。
PreparedStatement 接口继承 Statement,PreparedStatement 实例包含已编译的 SQL 语句, 所以其执行速度要快于 Statement 对象。
Statement为一条Sql语句生成执行计划, 如果要执行两条sql语句 select colume from table where colume=1;select colume from table where colume=2; 会生成两个执行计划 一千个查询就生成一千个执行计划!
PreparedStatement用于使用绑定变量重用执行计划 select colume from table where colume=:x; 通过set不同数据只需要生成一次执行计划,可以重用
20.ArrayList与LinkedList
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。这里的所谓动态数组并不是那个“ 有多少元素就申请多少空间 ”的意思,通过查看源码,可以发现,这个动态数组是这样实现的,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组
ArrayList list=new ArrayList(); 这种是默认创建大小为10的数组,每次扩容大小为1.5倍ArrayList list=new ArrayList(20); 这种是指定数组大小的创建,没有扩充
LinkedList不是现场安全的
25
2.
1 0
- 牛客网错题本之JAVA_第二期
- 牛客网错题本之JAVA_第一期
- 牛客网错题本之JAVA_第三期
- 自考总结之第二期
- java_第二章基础
- java_第二章 字符串
- 韦东山第二期视频之心得体会
- 韦东山视频第二期之心得体会
- 艺术编程-技术之声第二期
- 第二期
- 第二期
- Android开发之移动互联网周刊第二期
- 异常最诡异第二期之 Jedis pool.returnResource(jedis)
- 【小萝莉说Crash】第二期:Unrecognized selector xxx 之 ForwardInvocation
- 蓝桥杯VIP题库之第二期——分解质因数
- 读书计划之第二本《C专家编程》
- 第二期推荐参考
- 第二期征文结果
- List中存放不同类型对象之间的转换
- TextView加载html图片有问题
- 台大林轩田《机器学习基石》学习笔记:可行性(Hoeffding、Multi-binhoeffding、VC bound)
- 工作记录
- 插入排序
- 牛客网错题本之JAVA_第二期
- Android 安全卫士 第二天
- 希尔排序
- adb device not found
- 可以无限循环,自动旋转,停靠的3D旋转布局控件
- String、StringBuffer和StringBuilder的区别
- Android 安全卫士 第二天_注意事项
- Android自定义View(一)
- 利用qmake生成Makefile文件