资源描述
JAVA基础测试题 -CORE JAVA部分1 在main(String args)方法内是否可以调用一个非静态方法?答:main方法是静态方法,不能直接去访问非静态成员(成员可以是成员变量或是成员方法)2 请简述java程序运行的过程答: .java程序-编译-.class-运行-显示结果3 java中的控制台输出内容换行方式有几种? 答:第一种:System.out.println(); 第二种:System.out.print(“n”);4 java中的注释有哪几种?分别用来注释什么?答:有三种注释分别为:单行注释: /常用来注释变量多行注释:/* *用来注释变量,方法,类*/文档注释:/* *用来注释变量,方法,类 */5 请简述java 中标识符命名规则.答:必须是字母,数字,下划线,$组成不能以数字开头;不能是java中的保留字,最好见名知义6 请举例说明Scanner这个类的常用方法答:next() nextLine() nextInt() nextFloat() nextDouble() hasNextInt()7 java中的数据类型分为哪两类?答:数据类型分八个基础数据类型(byte,short,int ,long ,float,double,char,boolean)和引用数据类型(包括类,接口和数组)8 java中全局变量和局部变量的区别?答:位置的区别:java中全局变量就是类中的属性,而局部变量是方法中或代码块中定义的变量;初始值不一样:全局变量不赋值,系统会给默认值,也不会报错,而局变部量必须要赋初始值;作用域不一样:全局变量在整个类所有方法中可以访问,局部变量只能在定义它的那一对括号中才可以访问9 同一个文件里是否可以有两个public类?答:不可能,一个java文件中只能有一个类是public的,而必须是public的类才可以作为java文件的类名.10 方法名是否可以与构造器的名字相同?答:可以。11 初始化了一个没有run()方法的线程类,是否会出错?答:不会出错第一种方法:直接继承Thread类。public class Testpublic static void main(String args)ThreadClass t = new ThreadClass();t.start();System.out.println(end);/输出“end”class ThreadClass extends Thread /Thread类已经实现了空的run()方法。第二种方法:实现Runnable接口public class Testpublic static void main(String args)ThreadClass t = new ThreadClass();Thread thread = new Thread(t);thread.start();System.out.println(end);class ThreadClass implements Runnable public void run() /必须有此方法否则编译报错。它是Runnable接口中的抽象方法。System.out.println(Threads);12 局部内部类是否可以访问非final变量?答案:不能访问局部的,可以访问成员变量(全局的)。class Outprivate String name = out.name;void print()final String work = out.local.work;/若不是final的则不能被Animal 使用.int age=10;class Animal/定义一个局部内部类.只能在print()方法中使用./局部类中不能使用外部的非final的局部变量.全局的可以.public void eat()System.out.println(work);/ok/age=20;error not finalSystem.out.println(name);/ok.Animal local = new Animal();local.eat();13 选择语句case中,允许使用的值有哪些? 答案:int,short,char,byte(都在int范围之内,且是整数),jdk1.7开始支持String类型14 Math,String是不可继承的。(final类)答:Math,String是不可继承的。(final类)15 instanceof的作用答:判断某个对象是否属性某个类或某个接口的对象16 构造方法干什么用?有什么特点答:构造方法在创建对象的时候用来创建类的对象,可以给创建的对象进行初始化.构造方法的特点:a1.构造方法的名字必须和类名相同 a2.没有返回值也不需要void修鉓.17 =和=的区别答:=表示赋值,=表示判断两个对象是否相等18 一个抽象类与接口的区别答:抽象类要asbstract修鉓,抽象类中有抽象方法和非抽象方法,抽象方法必须用asbstract修鉓,且没有方法体。接口中是一个“特殊的类”,特殊到里面的属性都是最终静态常量,方法都是抽象方法,没有方法体。19 Collection与Collections的区别?答案:Collection是一个接口,但 Collections却是一个辅助类,里面有很多静态的工具方法。而且很有用的。如:reverse(Listlist);sort(Listlist, Comparatorc)等。Collections没有实现任何接口。它直接继承了Object。20 Java成员变量默认初始化的值。成员变量类型取值 byte-0 short-0 int-0 long-0L char-u0000 float-0.0F double-0.0D boolean-false所有引用类型-null21 面向对象的三大特性?答案:最基本特征:封装,继承,多态。其他特征:抽象关联,聚合,组合,内聚,耦合22 String是最基本的数据类型吗? String 和StringBuffer的区别?答案:String不是一最基本的数据类型。STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法 23 int 和 Integer 有什么区别答案:int是基本类型。Integer是引用类型。Integer可以把String转换成int。24 运行时异常与一般异常有何异同? 答案:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。25 说出ArrayList,Vector, LinkedList的存储性能和特性.答案:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 26 数组转换问题。Object object = new Person2;Person person = new Person 3;person = (Person )object;/可以转换int i = new int2;long l = new int3;i = (long)l;/不可以转换27 用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据Server.java:源代码import java.net.*;import java.io.*;class Serverpublic Server()BufferedReader br = null;PrintWriter pw = null;tryServerSocket server = new ServerSocket(8888);/建立服务器端Socket socket = server.accept();/监听客户端/得到该连接的输入流br = new BufferedReader(new InputStreamReader(socket.getInputStream();/得到该连接的输出流pw = new PrintWriter(socket.getOutputStream(),true);/先读后写String data = br.readLine();System.out.println(data);/输出到控制台pw.println(data);/转发给客户端catch(Exception e)e.printStackTrace();finallytry/关闭读写流br.close();pw.close();catch(Exception e)public static void main(String args) Server server = new Server();Client.java:源代码import java.net.*;import java.io.*;class Clientpublic Client()BufferedReader br = null;PrintWriter pw = null;try Socket socket = new Socket(localhost,8888);/与服务器建立连接,服务器要先启 /得到Socket的输入与输出流 br = new BufferedReader(new InputStreamReader(socket.getInputStream(); pw = new PrintWriter(socket.getOutputStream(),true); /先写后读 pw.println(Client:你好!); String data = null; while(true) data = br.readLine(); if(data!=null) break; System.out.println(data);catch(Exception e)e.printStackTrace();finallytrybr.close();pw.close();catch(Exception e)public static void main(String args) Client c = new Client();28 谈谈final, finally, finalize的区别。答案:final 用于声明属性,方法和类,分别表示属性不可变,注意:如果是基本类型说明变量本身不能改变,如果是引用类型,说明它不能指向其他的对象了。但对象还是可以改变的。方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示无论是否出现异常总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。29 HashMap和Hashtable的区别。 答案:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都实现了Map接口, 主要区别在于HashMap允许空(null)键值(key)与空值(value),由于非线程安全,效率上可能高于Hashtable,Hashtable不允许有空(null)键值(key)与空值(value)。30 GC是什么? 为什么要有GC? 答案:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显式操作方法。 31 String s = new String(xyz);创建了几个String Object? 答案:两个,一个是对象,一个是对象的引用。32 Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?答案:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重载Overload是一个类中多态性的一种表现,方法名必需相同,参数列表必需不同.(长度不同或类型不同),与返回值类型没有关系. 构造器也可以重载.方法名和参数列表都相同,只有返回类型不相同则是方法重复定义.编译出错. Overloaded的方法是可以改变返回值的类型。重写Override是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。33 写一个冒泡排序的程序,实现对一组杂乱无序的数组中数据进行升序排列int num = 3,10,1,33,9,6;int temp =0; /中间变量/外层循环比较轮数for(int i=0;inum.length-1;i+) for(int j=0;jnumj+1)/换位置 temp = numj; numj = numj+1; numj+1 = temp; 34 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 答:多线程有两种实现方法,一种是继承Thread类,另一种是:实现Runnable接口. 同步的实现方面有两种,分别是synchronized,wait与notify ,实现方式有同步代码块,同步方法35 编程题: 写一个Singleton出来。方式一:醉汉式public class Singletonprivate static Singleton test = new Singleton();/静态的。保留自身的引用。/必须是私有的构造函数private Singleton()public static Singleton getInstance()/公共的静态的方法。return test;方式二:懒汉式public class Singletonprivate static Singleton test = null;/静态的。保留自身的引用。/必须是私有的构造函数private Singleton()public static Singleton getInstance()/公共的静态的方法。if(test = null)test = new Singleton();return test;36 说出一些常用的类,包,接口,请各举5个答案:常用类-System,ArrayList,FileInputStream,Thread,Socket.常用的包-java.io,java.util,java.sql,java.javax.naming,java.net常用接口-Collection,Connection, Cloneable, Comparable, Serializable37 谈谈你所熟悉的设计模式答案:单例模式,工厂模式,代理模式,观察者模式等38 什么是反射?什么地方用反射?常用的反射的类有哪些?答:java反射:在编译时不确定哪个类被加载,而在程序运行时才加载、探知、使用;动态加载类的对象可以用反射。常用反射的类有:A1.Class类可获取类和类的成员信息 A2.Field类可访问类的属性 A3.Method类可调用类的方法 A4.Constructor类可调用类的构造方法39 谈谈你熟知的java设计原则答:开闭原则,里氏替代原则,接口隔离原则,单一职责,依赖倒置原则等40 多线程有几种实现方式?举例完成一个线程输出1到10,另一个线程输出10到1,使两个线程交替执行.注:因为这4个线程共享J,所以线程类要写到内部类中。加线程:每次对j加一。减线程:每次对j减一。public class TestThreadsprivate int j=1;/加线程private class Inc implements Runnablepublic void run()for(int i = 0;i 10;i+)inc();/减线程private class Dec implements Runnablepublic void run()for(int i = 0;i 10;i+)dec();/加1private synchronized void inc()j+;System.out.println(Thread.currentThread().getName()+-inc:+j); /减1private synchronized void dec()j-;System.out.println(Thread.currentThread().getName()+-dec:+j); /测试程序public static void main(String args)TestThreads test = new TestThreads();/创建两个线程类Thread thread = null;Inc inc = test.new Inc();Dec dec = test.new Dec();/启动4个线程for(int i = 0;i 2;i+)thread = new Thread(inc);thread.start();thread = new Thread(dec);thread.start();
展开阅读全文