(2.1)代码
(2.1.1)调用顺序类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
class
B
{
public
static
B t1 =
new
B();
public
static
B t2 =
new
B();
{
System.out.println(
"构造块"
);
}
static
{
System.out.println(
"静态块"
);
}
public
static
void
main(String[] args)
{
B t =
new
B();
}
}
|
- 静态块 构造块 构造块 构造块
- 构造块 静态块 构造块 构造块
- 构造块 构造块 静态块 构造块
- 构造块 构造块 构造块 静态块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public
class
HelloB
extends
HelloA
{
public
HelloB()
{
}
{
System.out.println(
"I’m B class"
);
}
static
{
System.out.println(
"static B"
);
}
public
static
void
main(String[] args)
{
new
HelloB();
}
}
class
HelloA
{
public
HelloA()
{
}
{
System.out.println(
"I’m A class"
);
}
static
{
System.out.println(
"static A"
);
}
}
|
- static A I’m A class static B I’m B class
- I’m A class I’m B class static A static B
- static A static B I’m A class I’m B class
- I’m A class static A I’m B class static B
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class
B
extends
Object
{
static
{
System.out.println(
"Load B"
);
}
public
B()
{
System.out.println(
"Create B"
);
}
}
class
A
extends
B
{
static
{
System.out.println(
"Load A"
);
}
public
A()
{
System.out.println(
"Create A"
);
}
}
public
class
Testclass
{
public
static
void
main(String[] args)
{
new
A();
}
}
|
- Load B ->Create B->Load A -> Create A
- Load B -> Load A ->Create B ->Create A
- Load B -> Create B-> Create A -> Load A
- Create B ->Create A ->Load B ->Load A
(2.1.2)重载覆盖类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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();
}
}
|
- null
- sub
- base
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package
Wangyi;
class
Base
{
public
void
method()
{
System.out.println(
"Base"
);
}
}
class
Son
extends
Base
{
public
void
method()
{
System.out.println(
"Son"
);
}
public
void
methodB()
{
System.out.println(
"SonB"
);
}
}
public
class
Test01
{
public
static
void
main(String[] args)
{
Base base =
new
Son();
base.method();
base.methodB();
}
}
|
- Base SonB
- Son SonB
- Base Son SonB
- 编译不通过
class StaticBlock {
static final int c = 3;
static final int d;
static int e = 5;
static {
d = 5;
e = 10;
System.out.println("Initializing");
}
StaticBlock() {
System.out.println("Building");
}
}
public class StaticBlockTest {
public static void main(String[] args) {
System.out.println(StaticBlock.c);
System.out.println(StaticBlock.d);
System.out.println(StaticBlock.e);
}
}
3
Initializing
5
10
(2.1.3)类型比较、转换和函数传值类
1
2
3
4
5
6
7
8
|
public
static
void
main(String[] args)
{
Listlist1 =
new
ArrayList();
list1.add(O);
Listlist2 = list1;
System.out.println(list1.get(O)
instanceof
Integer);
System.out.println(list2.get(O)
instanceof
Integer);
}
|
- 编译错误
- true true
- true false
- false false
1
2
3
4
|
1
.
byte
a1 =
2
, a2 =
4
, a3;
2
.
short
s =
16
;
3
. a2 = s;
4
. a3 = a1 * a2;
|
- Line 3 and Line 4
- Line 1 only
- Line 3 only
- Line 4 only
1
2
3
4
|
int
i=
0
;
Integer j =
new
Integer(
0
);
System.out.println(i==j);
System.out.println(j.equals(i));
|
- true,false
- true,true
- false,true
- false,false
- 对于不同的环境结果不同
- 程序无法执行
1
2
3
4
5
6
7
8
9
10
|
public
class
IfTest{
public
static
void
main(string[]args){
int
x=
3
;
int
y=
1
;
if
(x=y)
system.out.println(“Not equal”);
else
system.out.println(“Equal”);
}
}
|
- The output is “Equal”
- The output in “Not Equal”
- An error at line 5 causes compilation to fall.
- The program executes but does not print a message.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class
Two{
Byte x;
}
class
PassO{
public
static
void
main(String[] args){
PassO p=
new
PassO();
p.start();
}
void
start(){
Two t=
new
Two();
System.out.print(t.x+””);
Two t2=fix(t);
System.out.print(t.x+” ” +t2.x);
}
Two fix(Two tt){
tt.x=
42
;
return
tt;
}
}
|
- null null 42
- null 42 42
- 0 0 42
- 0 42 42
- An exception is thrown at runtime
- Compilation
1
2
3
|
int
i =
5
;
int
j =
10
;
System.out.println(i + ~j);
|
- Compilation error because”~”doesn’t operate on integers
- -5
- -6
- 15
1
2
3
4
5
6
7
8
9
10
|
public
class
StringDemo{
private
static
final
String MESSAGE=
"taobao"
;
public
static
void
main(String [] args) {
String a =
"tao"
+
"bao"
;
String b=
"tao"
;
String c=
"bao"
;
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}
|
- true true
- false false
- true false
- false true
-
2,==判断的是对象引用是否是同一个引用,判断字符串相等要用equals方法
首先判断a==MESSAGE ,由于常量池的优化策略,a为编译时连接,同一份字符串常量在内存中只有一份,因此是同一地址,返回true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
class
Example {
String str =
new
String(
"good"
);
char
[] ch = {
'a'
,
'b'
,
'c'
};
public
static
void
main(String args[]) {
Example ex =
new
Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str +
" and "
);
System.out.print(ex.ch);
}
public
void
change(String str,
char
ch[])
{
str =
"test ok"
;
ch[0] =
'g'
;
}
}
|
- good and abc
- good and gbc
- test ok and abc
- test ok and gbc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class
Value{
public
int
i=
15
;
}
public
class
Test{
public
static
void
main(String argv[]){
Test t=
new
Test( );
t.first( );
}
public
void
first( ){
int
i=
5
;
Value v=
new
Value( );
v.i=
25
;
second(v,i);
System.out.println(v.i);
}
public
void
second(Value v,
int
i){
i =
0
;
v.i =
20
;
Value val =
new
Value( );
v = val;
System.out.println(v.i+
" "
+i);
}
}
|
- 15 0 20
- 15 0 15
- 20 0 20
- 0 15 20
1
2
3
4
|
Integer i01 =
59
;
int
i02 =
59
;
Integer i03 =Integer.valueOf(
59
);
Integer i04 =
new
Integer(
59
)。
|
- System.out.println(i01== i02);
- System.out.println(i01== i03);
- System.out.println(i03== i04);
- System.out.println(i02== i04);
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Tester{
public static void main(String[] args){
Integer var1=
new
Integer(1);
Integer var2=var1;
doSomething(var2);
System.out.print(var1.intValue());
System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
integer=
new
Integer(2);
}
}
|
- 1true
- 2true
- 1false
- 2false
1
2
3
|
Integer s=
new
Integer(
9
);
Integer t=
new
Integer(
9
);
Long u=
new
Long(
9
);
|
- (s==u)
- (s==t)
- (s.equals(t))
- (s.equals(9))
- (s.equals(new Integer(9))
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
class
Demo {
public
static
void
main(String args[])
{
String str=
new
String(
"hello"
);
if
(str==
"hello"
)
{
System.out.println(
"true"
);
}
else
{
System.out.println(
"false"
);
}
}
}
|
1
2
3
|
Integer i =
42
;
Long l = 42l;
Double d =
42.0
;
|
- (i == l)
- (i == d)
- (l == d)
- i.equals(d)
- d.equals(l)
- i.equals(l)
- l.equals(42L)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
class
Square {
long
width;
public
Square(
long
l) {
width = l;
}
public
static
void
main(String arg[]) {
Square a, b, c;
a =
new
Square(42L);
b =
new
Square(42L);
c = b;
long
s = 42L;
}
}
|
- a == b
- s == a
- b == c
- a.equals(s)
(2.1.4)其他类
1
2
3
4
|
public
static
void
main (String[] args) {
String classFile =
"com. jd. "
. replaceA11(
"."
,
"/"
) +
"MyClass.class"
;
System.out.println(classFile);
}
|
- com. jd
- com/jd/MyClass.class
- ///MyClass.class
- com.jd.MyClass
- m. length()
- m. length-1
- m. length()+1
- m. length+1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
1
.
public
class
Enclosingone
2
.{
3
.
public
class
InsideOne {}
4
.
5
.}
6
.
public
class
inertest
7
.{
8
.
public
static
void
main(string[]args)
9
. {
10
. EnclosingOne eo =
new
EnclosingOne();
11
.
//insert code here
12
. }
13
.
14
.}
|
- InsideOne ei=eo.new InsideOne();
- eo.InsideOne ei=eo.new InsideOne();
- InsideOne ei=EnclosingOne.new InsideOne();
- EnclosingOne.InsideOne ei=eo.new InsideOne();
1
2
3
4
5
6
7
8
9
10
11
12
|
package test;
import java.util.Date;
public class SuperTest extends Date{
private static final long serialVersionUID = 1L;
private void test(){
System.out.println(
super
.getClass().getName());
}
public static void main(String[]args){
newSuperTest().test();
}
}
|
- SuperTest
- SuperTest.class
- test.SuperTest
- test.SuperTest.class
- char a[][];
- String a[];
- String[]a;
- Object a[50];
- String a[50];
- Object a[];
1
2
3
4
5
6
7
8
9
|
void
waitForSignal()
{
Object obj =
new
Object();
synchronized
(Thread.currentThread())
{
obj.wait();
obj.notify();
}
}
|
这题有两个错误的地方,第一个错误是 wait() 方法要以 try/catch 包覆,或是掷出 InterruptedException 才行
因此答案就是因为缺少例外捕捉的 InterruptedException
第二个错误的地方是, synchronized 的目标与 wait() 方法的物件不相同,会有 IllegalMonitorStateException ,不过 InterruptedException 会先出现,所以这不是答案
最后正确的程式码应该是这样:
void waitForSignal() {
Object obj = new Object();
synchronized (obj) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
obj.notify();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
enum
AccountType
{
SAVING, FIXED, CURRENT;
private
AccountType()
{
System.out.println(“It is a account type”);
}
}
class
EnumOne
{
public
static
void
main(String[]args)
{
System.out.println(AccountType.FIXED);
}
}
|
- Compiles fine and output is prints”It is a account type”once followed by”FIXED”
- Compiles fine and output is prints”It is a account type”twice followed by”FIXED”
- Compiles fine and output is prints”It is a account type”thrice followed by”FIXED”
- Compiles fine and output is prints”It is a account type”four times followed by”FIXED”
- Compilation fails
(2.1)概念
2.1.1名词类
- Java致力于检查程序在编译和运行时的错误
- Java能运行虚拟机实现跨平台
- Java自己操纵内存减少了内存出错的可能性
- Java还实现了真数组,避免了覆盖数据类型的可能
- java能检查程序在变异和运行时的错误
- java能运行虚拟机实现跨平台
- java自己操纵内存减少了内存出错的可能性
- java还实现了真数组,避免了覆盖数据的可能
- 能被java.exe成功运行的java class文件必须有main()方法
- J2SDK就是Java API
- Appletviewer.exe可利用jar选项运行.jar文件
- 能被Appletviewer成功运行的java class文件必须有main()方法
- 环境变量可在编译source code时指定
- 在编译程序时,所能指定的环境变量不包括class path
- javac一次可同时编译数个Java源文件
- javac.exe能指定编译结果要置于哪个目录(directory)
- java.exe
- javadoc.exe
- jdb.exe
- javaprof.exe
- java.lang
- java.system
- java.io
- java.util
- +=
- <<=
- <<<=
- >>>=
- "9HelloWorld"
- "_Hello World"
- "Hello*World"
- "Hello$World"
下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
1
|
byte
[] src,dst;
|
- dst=String.fromBytes(src,"GBK").getBytes("UTF-8")
- dst=new String(src,"GBK").getBytes("UTF-8")
- dst=new String("GBK",src).getBytes()
- dst=String.encode(String.decode(src,"GBK")),"UTF-8" )
- System.in System.out
- System.out System.in
- System.io.in System.io.out
- System.io.out System.io.in
- FilterReader
- InputStreamReader
- PipedReader
- Reader
java.io.Reader是一个读取字符流的抽象类,通过继承Reader类,可以很方便的读取字符流,比如,我们可以将一个字符串读取为一串串(字符)流,还可以读取一个文件里的内容为一串串的流。
Java(1.6.x)里提供了几种Reader的直接继承类,具体的有:BufferedReader, CharArrayReader, FileReader, InputStreamReader, PipedReader, StringReader等,子类须实现的方法只有 read(char[], int, int) 和 close()。
下列哪个选项是正确计算42度(角度)的余弦值?
- double d=Math.cos(42)
- double d=Math.cosine(42)
- double d=Math.cos(Math.toRadians(42))
- double d=Math.cos(Math.toDegrees(42))
下面有关文件系统元数据的描述,说法错误的是?
- 元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息等等
- 我们可以使用stat命令来查看文件更多的元数据信息
- Unix/Linux系统允许,多个文件名指向同一个inode号码
- 文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B,这是文件A就称为文件B的"硬链接"
2.1.2 关键词类
true、false、null、sizeof、goto、 synchronized 哪些是Java关键字?
- true
- false
- null
- sizeof
- goto
- synchronized
- 能保证线程安全
- volatile关键字用在多线程同步中,可保证读取的可见性
- JVM保证从主内存加载到线程工作内存的值是最新的
- volatile能禁止进行指令重排序
以下关于final关键字说法错误的是
- final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
- final修饰的类肯定不能被继承
- final修饰的方法不能被重载 final修饰的方法不能被重写而不是重载!
- final修饰的变量不允许被再次赋值
1
2
3
4
5
6
7
|
class
Foo {
final
int
i;
int
j;
public
void
doSomething() {
System.out.println(++j + i);
}
}
|
1
2
3
4
5
|
byte
b1=
1
,b2=
2
,b3,b6;
final
byte
b4=
4
,b5=
6
;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
|
- 输出结果:13
- 语句:b6=b4+b5编译出错
- 语句:b3=b1+b2编译出错
- 运行期抛出异常
1
2
3
4
5
6
7
8
|
public
class
TestClass {
private
static
void
testMethod(){
System.out.println(
"testMethod"
);
}
public
static
void
main(String[] args) {
((TestClass)
null
).testMethod();
}
}
|
- 编译不通过
- 编译通过,运行异常,报NullPointerException
- 编译通过,运行异常,报IllegalArgumentException
- 编译通过,运行异常,报NoSuchMethodException
- 编译通过,运行异常,报Exception
- 运行正常,输出testMethod
- final
- static
- synchronized
- native
- None of these.
- static表示这个变量可以在其他文件中使用
- static变量连接期被分配到了data段,即使是在函数调用中定义也不会在栈中产生,而是在程序加载期就被加入了内存
- const表面含义是个常量,但实际上还是占据一个内存位置的变量,但是它的值一般实在编译时期就决定了
- 上面说法都不正确
- 抽象类中可以有普通成员变量,接口中没有普通成员变量。
- 抽象类和接口中都可以包含静态成员变量。
- 一个类可以实现多个接口,但只能继承一个抽象类
- 抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。
- private
- public
- protected
- static
选a,c,d,only public & abstract are permitted
你既然定义了interface(接口),那肯定是要其它的类去实现它的, 不然你定义它干吗,所以不能用protected去修饰, 而要用public去修饰。
接口可以去继承一个已有的接口。
接口只能被public和默认修饰符修饰,protected也不行所以除了public其他的都要选
- private
- 无修饰符
- public
- protected
- public成员
- private成员
- protected成员
- 数据成员
- 函数成员
2.1.3 Object类
- 正确
- 错误
A. 数组是一种对象
(《java jdk5.0 学习笔记》良葛格)
- equals(Object obj) 指示某个其他对象是否与此对象“相等”
- copy() 创建并返回此对象的一个副本 Object中没有copy方法
- wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
- toString() 返回该对象的字符串表示
下面属于java包装类的是?
- String String和Date本身就是类。所以也就不存在什么包装类的概念
- Long
- Character
- Short
下列关于容器集合类的说法正确的是?
- LinkedList继承自List
- AbstractSet继承自Set
- HashSet继承自AbstractSet
- WeakMap继承自HashMap
- ArrayList
- Vector
- Hashtable
- Stack
- Map map = new HashMap()
- Map map = new TreeMap()
- Map map = new ConcurrentHashMap();
- Map map = Collections.synchronizedMap(new HashMap());
- 他们都实现了Map接口。
- HashMap非线程安全,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供额外同步。
- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
- 通过contains方法可以判断一个对象是否存在于HashMap或者Hashtable中。
- 0
- 1
- 2
- 3
1
2
3
4
5
6
7
8
9
10
11
|
Iterator it = list.iterator();
int
index =
0
;
while
(it.hasNext())
{
Object obj = it.next();
if
(needDelete(obj))
//needDelete返回boolean,决定是否要删除
{
//todo delete
}
index ++;
}
|
- it.remove();
- list.remove(obj);
- list.remove(index);
- list.remove(obj,index);
for(int i=0;i<list.size();i++){
list.remove(...);
}
循环过程中list.size()的大小变化了,就导致了错误。
所以,如果你想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。
下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Number.Double、java.lang.Number.Math、 java.lang.Number.ClassLoader
- Thread
- Number
- Double
- Math
- ClassLoader
下面有关JAVA异常类的描述,说法错误的是?
- 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
- 非RuntimeException一般是外部错误,其必须被 try{}catch语句块所捕获
- Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
- RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
class
Test{
public
int
add(
int
a,
int
b){
try
{
return
a+b;
}
catch
(Exception e) {
System.out.println(
"catch语句块"
);
}
finally
{
System.out.println(
"finally语句块"
);
}
return
0
;
}
public
static
void
main(String argv[]){
Test test =
new
Test();
System.out.println(
"和是:"
+test.add(
9
,
34
));
}
}
|
- catch语句块,和是:43
- 编译异常
- finally语句块,和是:43
- 和是:43,finally语句块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
class
Test{
public
static
int
a(){
int
a =
0
;
try
{
a =
1
;
return
a;
}
catch
(Exception e) {
}
finally
{
a =
2
;
}
return
3
;
}
public
static
void
main(String[] args){
System.out.println(a());
}
}
|
以下关于对象序列化描述正确的是
- 使用FileOutputStream可以将对象进行传输
- 使用PrintWriter可以将对象进行传输
- 使用transient修饰的变量不会被序列化
- 对象序列化的所属类需要实现Serializable接口
2.1.4 并发类
Thread. sleep()是否会抛出checked exception?
- 会
- ThreadLocal继承自Thread
- ThreadLocal实现了Runnable接口
- ThreadLocal重要作用在于多线程间的数据共享
- ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
- ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏
- ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
- 线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
- 在Thread类中有一个Map,用于存储每一个线程的变量的副本。
- 对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式
下列关于Java并发的说法中正确的是()
- CopyOnWriteArrayList适用于写多读少的并发场景
- ReadWriteLock适用于读多写少的并发场景
- ConcurrentHashMap的写操作不需要加锁,读操作需要加锁
- 只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
java用()机制实现了进程之间的异步执行
- 监视器
- 虚拟机
- 多个CPU
- 异步调用
2.1.5 数据库驱动、加载器类
- 通过DriverManager.getConnection方法加载
- 调用方法 Class.forName
- 通过添加系统的jdbc.drivers属性
- 通过registerDriver方法注
- 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
- 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
- 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
- tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
- CallableStatement是PreparedStatement的父接口
- PreparedStatement是CallableStatement的父接口
- CallableStatement是Statement的子接口
- PreparedStatement是Statement的父接口
- JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程
- 对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,这种预处理语句查询比普通的Statement查询运行速度更快
- PreparedStatement中,“?” 叫做占位符,一个占位符可以有一个或者多个值
- PreparedStatement可以阻止常见的SQL注入式攻击
- -1
- 0
- 1
- 以上都不是
(2.1.2) 函数、类、接口
- JAVA程序的main方法必须写在类里面
- JAVA程序中可以有多个main方法
- JAVA程序中类名必须与文件名一样
- JAVA程序的main方法中,如果只有一条语句,可以不用{}(大括号)括起来
- 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
- super()和this()不一定要放在构造方法内第一行
- this()和super()可以同时出现在一个构造函数中
- this()和super()可以在static环境中使用,包括static方法和static语句块
2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
3)super()和this()均需放在构造方法内第一行。
4)尽管可以用this调用一个构造器,但却不能调用两个。
5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
class B extends A {}
class C extends A {}
class D extends B {}
Which three statements are true ?
- The type List<A>is assignable to List.
- The type List<B>is assignable to List<A>.
- The type List<Object>is assignable to List<?>.
- The type List<D>is assignable to List<?extends B>.
- The type List<?extends A>is assignable to List<A>.
- The type List<Object>is assignable to any List reference.
- The type List<?extends B>is assignable to List<?extends A>.
- The type List<A>is assignable to List.
关于抽象类与接口,下列说法正确的有?
- 优先选用接口,尽量少用抽象类
- 抽象类可以被声明使用,接口不可以被声明使用
- 抽象类和接口都不能被实例化。
- 以上说法都不对
- abstract修饰符可修饰字段、方法和类
- 抽象方法的body部分必须用一对大括号{ }包住
- 声明抽象方法,大括号可有可无
- 声明抽象方法不可写出大括号
1:用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。
2:用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。
- Java面向对象语言容许单独的过程与函数存在
- Java面向对象语言容许单独的方法存在
- Java语言中的方法属于类中的成员(member)
- Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同
- 在类方法中可用this来调用本类的类方法
- 在类方法中调用本类的类方法时可直接调用
- 在类方法中只能调用本类中的类方法
- 在类方法中绝对不能调用实例方法
(2.3)java web
- Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端
- 关闭浏览器意味着会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期
- 在禁用Cookie时可以使用URL重写技术跟踪会话
- 隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示
- ActionForm
- ValidatorActionForm
- ValidatorForm
- DynaValidatorActionForm
- 10
- 20
- 30
- 60
- java.servlet
- javax.servlet
- servlet.http
- javax.servlet.http
- init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法
- Service()方法处理客户机发出的所有请求
- destroy()方法标志servlet生命周期的结束
- servlet在多线程下使用了同步机制,因此,在并发编程下servlet是线程安全的
- 在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
- 在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
- 在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
- destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
- Servlet
- GenericServlet
- HttpServlet
- 用户自定义servlet
从以下哪一个选项中可以获得Servlet的初始化参数?
- Servlet
- ServletContext
- ServletConfig
- GenericServlet
- context.getParameter()
- context.getInitParameter()
- context.getAttribute()
- context.getRequestDispatcher()
- request.getRequestURL()
- request. getAttribute()
- request.getParameter()
- request.getWriter()
- 设置HTTP头标
- 设置cookie
- 读取路径信息
- 输出返回数据
- 读取cookie
- 读取HTTP头
- 设定响应的content类型
- 读取路径信息
1.读取和写入HTTP头标
2.取得和设置cookies
3.取得路径信息
4.标识HTTP会话
- 没有区别
- 如果当前reqeust中的HttpSession 为null,当传入参数为空时,就创建一个新的Session,否则返回null
- 如果当前reqeust中的HttpSession 为null,当传入参数为true时,就创建一个新的Session,否则返回null
HttpSession session = request.getSession() 等同于 request.getSession(true),如果不存在就创建一个新的session
- <filter>
- <filter-mapping>
- <servlet-filter>
- <filter-config>
- forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求 控制权不转交
- 执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
- 执行redirect时,服务器端告诉浏览器重新去请求地址
- forward是内部重定向,redirect是外部重定向
- redirect默认将产生301 Permanently moved的HTTP响应 302申请临时url
- session
- Cookie
- 地址重写
- 隐藏域
1).隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话应用。
2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
在客户端计算机重启后它仍可以保留其值
4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
- servlet处于服务器进程中,它通过多线程方式运行其service方法
- CGI对每个请求都产生新的进程,服务完成后就销毁
- servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等
- cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi
servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
CGI程序不可移植,为某一特定平台编写的CGI程序只能运行在这一特定的环境下
- spring是一个轻量级JAVA EE的框架集合
- spring是“依赖注入”模式的实现
- 使用spring可以实现声明事务
- spring提供了AOP方式的日志系统
Spring通过对AOP的支持,借助Spring与日志系统log4j实现日志系统
1.强大的基于JavaBeans的采用控制翻转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
2.一个可用于从applet到Java EE等不同运行环境的核心Bean工厂。
数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
3.内建的针对JTA和单个JDBC数据源的一般化策略,使Spring的事务支持不要求Java EE环境,这与一般的JTA或者EJB CMT相反。
4.JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用JDBC时,你无需再写出另一个'终止'(finally)模块。并且面向JDBC的异常与Spring通用数据访问对象(Data Access Object)异常等级相一致。
5.以资源容器,DAO实现和事务策略等形式与Hibernate,JDO和iBATIS SQL Maps集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的Hibernate集成问题。所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范。
6.灵活的基于核心Spring功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如JSP、FreeMarker、Velocity、Tiles、iText以及POI。值得注意的是,Spring中间层可以轻易地结合于任何基于MVC框架的网页层,例如Struts、WebWork或Tapestry。
7.提供诸如事务管理等服务的面向方面编程框架。
- 使用单向一对多关联,不使用双向一对多
- 不用一对一,用多对一取代
- 配置对象缓存,不使用集合缓存
- 继承类使用显式多态
- Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码
- Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里
- maven和ant都有“生命周期”的概念,当你输入一个命令后,maven或者ant会执行一系列的有序的步骤,直到到达你指定的生命周期
- Ant构建文件默认命名为build.xml,Maven默认构建文件为pom.xml
(2.6)Java Swing
关于AWT和Swing说法正确的是?
- Swing是AWT的子类
- AWT在不同操作系统中显示相同的风格
- AWT不支持事件类型,Swing支持事件模型
- Swing在不同的操作系统中显示相同的风格
下列Java常见事件类中哪个是鼠标事件类?()
- InputEvent
- KeyEvent
- MouseEvent
- WindowEvent
(2.5)设计模式
- 在工厂方法模式中,对于存在继承等级结构的产品树,产品的创建是通过相应等级结构的工厂创建的
- 不能形成静态工厂的继承结构
- 静态工厂对具体产品的创建类别和创建时机的判断是混和在一起的,这点在工厂方法中
- 二者都满足开闭原则:静态工厂以if else方式创建对象,增加需求的时候会修改源代码
- 装饰模式
- 合成模式
- 桥接模式
- 适配器
关于AWT和Swing说法正确的是?
- Swing是AWT的子类
- AWT在不同操作系统中显示相同的风格
- AWT不支持事件类型,Swing支持事件模型
- Swing在不同的操作系统中显示相同的风格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
class
Test{
public
static
int
a(){
int
a =
0
;
try
{
a =
1
;
return
a;
}
catch
(Exception e) {
}
finally
{
a =
2
;
}
return
3
;
}
public
static
void
main(String[] args){
System.out.println(a());
}
}
|