一、下列代码的执行结果是(a=11 t.a=2)
public class Test {
public static int a = 1;
public static void main(String[] args) {
int a = 10;
a++; Test.a++;
Test t=new Test();
System.out.println("a=" + a + " t.a=" + t.a);
}
}
值为1的a属于类变量也叫作成员变量,值为10的a是局部变量。
首先a++时,就近原则,用局部变量10来加;
Text.a直接用类名调用成员变量的情况,只能是static 修饰的成员变量1来加;
然后又实例化了对象,在输出中第一个a= 用就近原则输出11,第二个t.a 对象只能调用类变量输出2 。
二、依赖注入
依赖注入是一种思想,或者说是一种设计模式,在java中是通过反射机制实现,与具体框架无关。
Spring依赖注入(DI)的三种方式,分别为:
- 接口注入
- Setter 方法注入
- 构造方法注入
三、HttpServletRequest
HttpServletRequest类主要处理:
1.读取和写入HTTP头标
2.取得和设置cookies
3.取得路径信息
4.标识HTTP会话
四、中文编码方式
Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下:
1、采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;
2、采用GB2312或GBK编码方式时,一个中文字符占2个字节;
3、而采用UTF-8编码方式时,一个中文字符会占3个字节。
在C++中
在C++中,char是基础数据类型,8位,1个字节。byte不是基础数据类型,一般是typedef unsigned char byte;这样子的,也就是说,byte其实是unsigned char类型,那么也是8位,1个字节。不同的是,char可以表示的范围是-128-127,而byte可以表示的范围是0-255。
在java中,char和byte都是基础数据类型,其中的byte和C++中的char类型是一样的,8位,1个字节,-128-127。但是,char类型,是16位,2个字节, '\u0000'-'\uFFFF'。
为什么java里的char是2个字节?
- 因为java内部都是用unicode的,所以java其实是支持中文变量名的,比如string 世界 = "我的世界";这样的语句是可以通过的。
语句:char foo='中',是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译)
java中采用GB2312或GBK编码方式时,一个中文字符占2个字节,而char是2个字节,所以是对的。
五、public class contained in a Java program file must have the same name as the file, except for the extension ".java".(×)
内部类就不需要与文件名相同 。
六、反射
public Method[] getDeclaredMethods():返回类或接口声明的所有方法,包括public, protected, default (package) 访问和private方法的Method对象,但不包括继承的方法。当然也包括它所实现接口的方法。
public Method[] getMethods():返回类的所有public方法,包括其继承类的公用方法,当然也包括它所实现接口的方法。
七、多线程
CountDownLatch:允许一个或多个线程等待其他线程完成操作;
CyclicBarrier:同步屏障,让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会执行。
Callable中的call比Runnable中的run厉害就厉害在有返回值和可以抛出异常。同时这个返回值和线程池一起用的时候可以返回一个异步对象Future。
start是把线程从new变成了runnable。
八、接口
JDK8开始,接口中可以定义有方法体的方法,方法必须被default和static修饰。
九、JMX
JMX是在哪一个JDK版本开始支持?(1.3)
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
十、对文件名为Test.java的java代码描述正确的是(编译报错)
class Person {
String name = "No name";
public Person(String nm) {
name = nm;
}
}
class Employee extends Person {
String empID = "0000";
public Employee(String id) {
empID = id;
}
}
public class Test {
public static void main(String args[]) {
Employee e = new Employee("123");
System.out.println(e.empID);
}
}
父类没有无参的构造函数,所以子类需要在自己的构造函数中显式调用父类的构造函数。
添加super("nm");否则报错:Implicit super constructor Person() is undefined. Must explicitly invoke another constructor
class Person {
String name = "No name";
public Person(String nm) {
name = nm;
}
}
class Employee extends Person {
public Employee(String nm) {
super(nm);
// TODO Auto-generated constructor stub
}
String empID = "0000";
}
public class Test {
public static void main(String args[]) {
Employee e = new Employee("123");
System.out.println(e.empID);
}
}
十一、下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader
java.lang包中不能被继承的类:
- public final class Byte
- public final class Character
- public static final class Character.UnicodeBlock
- public final class Class<T>
- public final class Compile
- public final class Double
- public final class Float
- public final class Integer
- public final class Long
- public final class Math
- public final class ProcessBuilder
- public final class RuntimePermission
- public final class Short
- public final class StackTraceElement
- public final class StrictMath
- public final class String
- public final class StringBuffer
- public final class StringBuilder
- public final class System
- public final class Void