互联网厂商笔试真题解答。
1.super()和this()有什么区别?
This():当前类的对象,超父类对象。
Super():对子类中父类的成员和行为的访问必须遵守类继承的规则。
而这个代表的是当前对象,当然所有的资源都可以访问。
在构造函数中,如果第一行没有写super(),编译器会自动插入。但是如果父类没有不带参数的构造函数,或者这个函数是私有的(用private修饰),这个时候就必须给父类添加一个实例化结构。这个没有这个要求,因为它是自己实例化的。
在方法中,super和this使用的方法类似,只是super要考虑是否可以访问其父类的资源。
2.公共的、受保护的、私有的范围,和不写作时的区别?
Public:在不同的包中可用,在同一个包中可用,在一个类内可用。
私人:在班级内
Protected:不同包的子类,同一个包的子类以及类内的子类都是可用的。
不写的时候:在同一个包或者类里面。
3.编程并输出下图。
* * * * *
* * * *
* * *
* *
*
代码如下:
公共类打印{
public static void main(String[]args){
for(int I = 0;我& lt5;i++) {
for(int j = 5;j & gt我;j - ) {
system . out . print(" * ");
}
system . out . println();
}
}
}
4.JAVA事件委托机制和垃圾收集机制。
Java事件委托机制的概念,其中一个源生成一个事件并将其发送给一个或多个侦听器。在这个方案中,侦听器只是等待,直到它接收到一个事件。一旦事件被接受,侦听器将处理该事件,然后返回。
垃圾收集机制垃圾收集是回收或释放分配给对象但不再使用的内存的过程。如果一个对象没有对它的引用或者它的赋值为null,那么辅助对象就适合于垃圾收集。
5.在JAVA中,如何跳出目前的多重嵌套循环?
使用break返回方法。
6.什么是java序列化,如何实现?(写一个例子)
序列化(Serialization):一种处理对象流的机制,即将对象的内容流式传输。您可以读写流式对象,也可以在网络之间传输流式对象。序列化是为了解决读写对象流带来的问题。
序列化的实现:为需要序列化的类实现Serializable接口。没有实现此接口的方法。implementsSerializable只是为了标记对象是可序列化的,然后用一个输出流(比如FileOutputStream)构造一个ObjectOutputStream。然后,使用ObjectOutputStream对象的writeObject(Object obj)方法,可以写出参数为obj的对象(即保存其状态),并使用输入流对其进行恢复。
7.能一个”。java "源文件包含多个类(不是内部类)?有什么限制?
当然可以。如果这个类的修饰符是public,那么它的类名和文件名必须相同。
8.排序方法有哪些?请列出。用JAVA实现快速排序?
排序方式有插入排序(直接插入排序和希尔排序)、交换排序(冒泡排序和快速排序)、选择排序(直接选择排序和堆排序)、归并排序和分配排序(盒排序和基数排序)。
快速排序的伪代码。
9.过载和覆盖的区别。重载的方法可以改变返回值的类型吗?
Override override,子类覆盖父类的方法,子类传递给父类的引用调用子类的方法。
用相同的名称和不同类型的参数重载一个类的多个方法。
两者都是Java多态性的不同表现。
重载的方法是改变返回值的类型。
1,公共类Ctest(){
公共静态void main(){
system . out . prinln(8+8+" 88 "+8+8);
}
} 168888
(方法的覆盖和重载是Java多态性的不同表现。重写是父类和子类之间多态性的表现,重载是一个类中多态性的表现。如果在子类中定义的方法与其父类具有相同的名称和参数,我们说该方法是重写的。当子类中的对象使用这个方法时,它将调用子类中的定义。对于它来说,父类中的定义似乎是“屏蔽”的。如果在一个类中定义了多个同名的方法,它们要么有不同的参数号,要么有不同的参数类型,这就是所谓的方法重载。
重载的方法是改变返回值的类型。)
10有什么特点。期末班?
属性常量方法不能被重写,类不能继承。
11.继承时类的执行顺序问题一般是选择题。你要打印什么?
答:父类:
包装测试;
公共类父类{
public FatherClass() {
system . out . println(" FatherClassCreate ");
}
}
子类:
包装测试;
导入测试。父类;
公共类ChildClass扩展FatherClass{
public ChildClass() {
system . out . println(" child class create ");
}
公共静态void main(String[] args) {
father class fc = new father class();
child class cc = new child class();
}
}
输出结果:
丙:>;java测试。子类
父类创建
父类创建
子类创建
12.如何实现内部类?
包装测试;
公共类OuterClass {
私有类InterClass {
公共接口(){
system . out . println(" inter class create ");
}
}
公共外部类(){
InterClass IC = new InterClass();
system . out . println(" outer class create ");
}
公共静态void main(String[] args){
outer class oc = new outer class();
}
}
输出结果:
丙:>;java测试/外部类内部类创建外部类创建
13.如何用JAVA实现排序,用JAVA类实现序列化(两种方式)?
14.比如在集合的框架中,实现比较应该实现什么样的接口?
15.按插入方法排序的代码如下
包装测试;
导入Java . util . *;
类别插入排序{
ArrayList al
public InsertSort(int num,int mod) {
al =新数组列表(num);
Random rand = new Random();
system . out . println(" ArrayList sort before:");
for(int I = 0;我& ltnumi++ ){
al . add(new Integer(math . ABS(rand . nextint())% mod+1));
system . out . println(" al["+I+"]= "+al . get(I));
}
}
public void SortIt(){
整数tempInt
int MaxSize = 1;
for(int I = 1;我& ltal . size();i++){
tempInt =(Integer)al . remove(I);
if(tempint . int value()& gt;=((Integer)al . get(MaxSize-1))。intValue()){
al.add(MaxSize,tempInt);
maxsize++;
system . out . println(al . tostring());
}否则{
for(int j = 0;j & ltMaxSizej++ ){
if((Integer)al . get(j))。int value()>;=tempInt.intValue()){
al.add(j,tempInt);
maxsize++;
system . out . println(al . tostring());
打破;
}
}
}
}
system . out . println(" ArrayList sort after:");
for(int I = 0;我& ltal . size();i++) {
system . out . println(" al["+I+"]= "+al . get(I));
}
}
公共静态void main(String[] args) {
insert sort is = new insert sort(10,100);
是。sort it();
}
}
实现JAVA类序列化的方法是实现java.io.Serializable接口。
集合框架中的比较需要实现Comparable接口和Comparator接口。
16.编程:写一个函数截取字符串,输入是一个字符串和字节数,输出是一个按字节截取的字符串。但要保证汉字不被截成两半,比如“I ABC”4,应该截成“I AB”,输入“I ABC中文DEF”,6,应该输出为“I ABC”而不是“I ABC+中文半”。
公共静态void split(String source,intnum)引发异常{
intk = 0;
Stringtemp =
for(int I = 0;我& ltsource.length()。i++){
byte[]b=(source.charAt(i)+" ")。getBytes();
k = k+b . length;
if(k & gt;num){
打破;
}
temp = temp+source . charat(I);
}
system . out . println(temp);
}
15,Java编程,打印昨天的当前时间。
公共类昨天当前{
public void main(String[] args){
calendar cal = calendar . getinstance();
cal.add(日历。日期,-1);
system . out . println(cal . gettime());
}
}
16,文件读写,实现一个计数器。
public int getNum(){
int I =-1;
尝试{
String stri =
buffered reader in = new buffered reader(new filereader(f));
while((stri=in.readLine())!=null){
I = integer . parse int(stri . trim());
}
in . close();
}catch(异常e){
e . printstacktrace();
}
返回I;
}
public void setNum(){
int I = getNum();
i++;
尝试{
PrintWriter out = new PrintWriter(newBufferedWriter(new FileWriter(f,false)));
out . write(string . value of(I));//可能是编码的原因。如果直接写int,会有java编码和windows编码的混淆,所以这里写String。
out . close();
}catch(异常e){
e . printstacktrace();
}
}
17,指出以下程序的运行结果。
A级
静态{
system . out . print(" 1 ");
}
公共A(){
system . out . print(" 2 ");
}
}
B类扩展了A{
静态{
system . out . print(" a ");
}
公共B(){
system . out . print(" b ");
}
}
公共类Hello{
公共静态void main(String[] ars){
a ab = new B();//在这里执行,结果:1a2b
ab = new B();//在这里执行,结果:1a2b2b
}
注意:一个类的静态代码段可以看作是该类第一次加载(由虚拟机加载)的代码。对于一个类的加载,应该先执行它的基类的构造,然后再执行它自己的构造。
18.抽象类和接口有什么区别?
(1)接口可以多次实现,抽象类只能用单个extend (2)接口定义,可以定义实现抽象类(3)接口默认字段定义为:publicstatic final,抽象类默认字段为“friendly”(在本包可见)。
需要积累函数时使用抽象类,不需要积累函数时使用接口。
19.阶级的反思机制是什么?
通过类对象,可以得到字段、方法、构造器、接口、超类、修改等。您可以通过该类实例化一个实例、设置属性和唤醒方法。Spring中的一切都是自反的,struts和hibernate都是通过类自反开发的。
20.类回射机制中有哪些包和核心类?
①Java . lang . class②Java . lang . refrection . method③Java . lang . refrection . field
④Java . lang . refrection . constructor⑤Java . lang . refrection . modifier⑥Java . lang . refrection . interface
21,拿课的三个过程是什么?
① object.getclass () ② class.class或integer . type(int)integer . class(Java . lang . integer)③class . forname();
22.如何调用类中的方法?
①生成一个类数组解释方法的参数②通过类对象和方法参数获取方法③通过method.invoke(实例,参数值数组)唤醒方法。
23.如何将数字字符转换成整数(Double)?
integer . parse int(" 1234 ")double . parse double(" 123.2 ")
24.如何把数字转换成字符?
1+"" 1.0+""
25、如何去小数点后两位,并四舍五入。
双d = 1256.22d;d = d/100;system . out . println(math . round(d)* 100);
26、如何获取日期、小时、分钟和秒?
calendar c = calendar . getinstance();
c.set(日历。年,2004年);
c.set(日历。月,0);
c.set(日历。月日,31);
system . out . println(c . get(Calendar。YEAR)+" "+(c.get(日历。月)+1)+" "+c.get(日历。月日);
27.如何得到1970到现在的毫秒数?
Java . util . Date dat = new Date();long now = dat . gettime();
或System.currentTimeMillis()
28、如何得到一个日期是一个月的最后一天?
当前日期加一天,如果当前日期与结果的月份不同,则为最后一天。
取次月第一天,次月第一天-1
公共静态void main(String[] args){
calendar c = calendar . getinstance();
c.set(日历。年,2004年);
c.set(日历。月,0);
c.set(日历。月日,30);
Calendar c 1 =(Calendar)c . clone();
system . out . println(c . get(Calendar。YEAR)+""+(c.get(日历。月)+1)+" "+c.get(日历。月日);
c.add(日历。月日,1);
如果(c.get(日历。月)!=c1.get(日历。月)){
System.out.println("是最后一天");
}否则{
System.out.println("不是后天");
}
}
29.如何格式化日期?
导入Java . text . simple date format;
SimpleDateFormat SDF = newSimpleDateFormat(" yyyy-MM-DD hh:MM:ss ");
Date dat = new Date();
string str = SDF . format(dat);//将日期转换成字符串
system . out . println(str);
Java . util . date d 1 = SDF . parse(" yyyy-mm-DD ");//将字符串转换为日期
30.编码转换,如何将GB2312编码的字符串转换成ISO-8859-1编码的字符串。
字符串a =新字符串(“钟”。getbytes ("GB 2312 ")," ISO-8859-1 ");
字符串a =新字符串(" in "。getBytes(" iso-8859-1 "));
应该是字符串a =新字符串(“钟”。getbytes ("GB 2312 ")," ISO-8859-1 ");
string a 1 = new string(a . getbytes(" iso-8859-1 "));