1指出下面程序的运行结果:
1classA{
2
3static{
4System.out.print("1");
5 }
6
7publicA(){
8System.out.print("2");
9 }
10}
11
12class B extendsA{
13
14static{
15System.out.print("a");
16 }
17
18publicB(){
19System.out.print("b");
20 }
21}
22//何问起 hovertree.com
23publicclassHello{
24
25publicstaticvoid main(String[] args){
26 A ab = newB();
27 ab = newB();
28 }
29
30 }
答:执行结果:1a2b2b。创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。
2.safeGet
题目:有时候我们需要访问一个对象较深的层次,但是如果这个对象某个属性不存在的话就会报错,例如:
var data = { a: { b: { c: 'ScriptOJ' } } }
data.a.b.c // =>scriptoj
data.a.b.c.d // => 报错,代码停止执行
console.log('ScriptOJ') // => 不会被执行
请你完成一个 safeGet 函数,可以安全的获取无限多层次的数据,一旦数据不存在不会报错,会返回 undefined,例如:·
//code from http://caibaojian.com/js-example.html
var data = { a: { b: { c: 'ScriptOJ' } } }
safeGet(data, 'a.b.c') // =>scriptoj
safeGet(data, 'a.b.c.d') // => 返回 undefined
safeGet(data, 'a.b.c.d.e.f.g') // => 返回 undefined
console.log('ScriptOJ') // => 打印 ScriptOJ
答案:
const safeGet = (o, path) => {
try {
return path.split('.').reduce((o, k) => o[k], o)
} catch (e) {
return void 666
}
}
3.简单说一说drop、delete与truncate的区别
SQL中的drop、delete、truncate都表示删除,但是三者有一些差别
- delete和truncate只删除表的数据不删除表的结构
- 速度,一般来说: drop> truncate >delete
- delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.