1、class不加修饰符默认default,只在当前包里能用。
2、构造函数前面的修饰符的作用类似class的,限制引用的权限。
3、java对象的创建其实就是类的实例化,类的实例化就是在堆上copy整个类的成员变量和方法,然后调用相应的构造函数初始化,对象的名字其实就是一个引用,指向实例化的类,对象名保存在栈里。
4、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但是只能有一个public类,并且该public类名与文件名相同。
5、&和&&的区别?
都能做为逻辑与的作用,但是if(null!=str && str.equals(""))和if(null!=str & str.equals(""))是有区别的,前面一种&&只要第一个条件判定为false,第二个条件就不会判断;&则两个条件都会判断,所以如果str是null的话会抛出NullPointerException异常。&还能做 位 运算符。
6、final关键词修饰的变量是值不能改变,还是引用不能改变?
final int n=100;//n不能再赋其它值了
final String ss="hello";//ss不能再赋值了
final StringBuilder sb=new StringBuilder("hello");
sb.append("world");//sb可以改变值,但是不能重新修改引用的值,比如:sb=new StringBuilder("world")
所以 void f(final StringBuilder sb){} 这种赋参数的方式的并不能保证参数不会在方法里面不能修改。
7、java中方法的重载overload跟返回值类型和修饰符无关,但是方法名一定相同,参数一定不能相同;如果参数相同则不知道调用哪个,会报错。
java中的override是重写父类的方法,那么该类的对象调用该方法时就会调用自己的,而不是父类的。
8、java中实现线程操作的几种方法:
(1)继承自Thread类,重写run()方法,对象.start()启动线程;
(2)new Thread(new Runnable(){}).start();继承自接口Runnable,并且实现run()方法,就可以创建线程了;
(3)线程池操作,pool=Executors.newFixedThreadPool(poolSize);pool.execute(new Thread());
还有其它种类线程池,如:
Executors.newCachedThreadPool().execute(new Runable(){publicvoid run(){}});
Executors.newSingleThreadExecutor().execute(new Runable(){publicvoid run(){}});
未完待续。。。