JAVA核心技术1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public class Test { public static void main(String[] args) { ThreadClass t = new ThreadClass(); Thread thread = new Thread(t); thread.start(); System.out.println("end"); } } class ThreadClass implements Runnable {
4. 初始化了一个没有 run()方法的线程类,是否会出错?
答案:不会。
第一种方法:直接继承 Thread 类。
public class Test { public static void main(String[] args) { ThreadClass t = new ThreadClass(); t.start(); System.out.println("end");//输出“end” } } class ThreadClass extends Thread //Thread 类已经实现了空的 run()方法。 { } 第二种方法:实现 Runnable 接口
public void run() //必须有此方法否则编译报错。它是 Runnable 接口中的抽象方法。 { System.out.println("Threads"); } } 4. 局部内部类是否可以访问非 final 变量?
答案:不能访问局部的,可以访问成员变量(全局的)。
class Out { private 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 final System.out.println(name);//ok. } } Animal local = new Animal(); local.eat(); } } 5. 选择语句 case 中,允许使用的值有哪些? 答案:int,short,char,byte(都在 int 范围之内,且是整数)
1. 在 main(String[] args)方法内是否可以调用一个非静态方法?
答案:不能
2. 同一个文件里是否可以有两个 public 类?
答案:不能
3. 方法名是否可以与构造器的名字相同? 答案:可以。
public class Test { public Test(String iceboy) { System.out.println(iceboy); } public void Test(String iceboy) { System.out.println(iceboy); } public static void main(String[] args) { Test a = new Test("abc");//输出“abc” a.Test("iceboy");//输出“iceboy” } }
public class Test { public static void main(String[] args) { int a=1; try { a=a/0; }catch(Exception e) { System.out.println("catch"); return;//当 return 时,finally 中的语句会执行。 //System.exit(0);//若用上这句,finally 中的语句不会执行。直接返回,退出程序。
Vector 由于使用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现 存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
24.设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。写出程序。
13.class Child extends Parents{}
class Parents{}
是否可以这样声明类,在一个文件中?
答案:可以。
14. 数组,无论是当前的,还是类等级的,都会被初始化。
String 是被初始化为 null,不是空字符。
null,““,” “,都是不同的。
“continue”只能在一个循环里(如 for,do,while),它不能在 case 语句中出现。
9. if(-0.0 == 0.0)是相等还是不等?
答案:相等。
10.一个抽象类是否可以没有抽象方法?
答案:可以。
11.RandomAccessFile 类继承 Object,并且实现了 DataInput 和 DataOutput 接口。
答案:正确
12.Collection 与 Collections 的区别?
} finally //当没有 System.exit(0);时,无论是否发生异常它都会执行。 { System.out.println("finally"); } } } 注: try-catch-final 块的顺序不能调换。
8. 下面都是正确的 main 方法签名。
public static void main(String[] args) public static final void main(String[] args) static public void main(String[] args) static public synchronized void main(String[] args) static public abstract void main(String[] args)//错误
注:因为这 4 个线程共享 J,所以线程类要写到内部类中。
加线程:每次对 j 加一。
减线程:每次对 j 减一。
public class TestThreads { private int j=1; //加线程 private class Inc implements Runnable { public void run() { for(int i = 0;i < 10;i++)பைடு நூலகம்{ inc(); } } } //减线程 private class Dec implements Runnable { public void run() { for(int i = 0;i < 10;i++) { dec(); } } } //加 1 private synchronized void inc() { j++; System.out.println(Thread.currentThread().getName()+"-inc:"+j); } //减 1 private 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++)
equals() 返回 false 如果对象类型不同,但不产生 编译错误。
15.Java 成员变量默认初始化的值。 成员变量类型 取值 byte-0 short-0 int-0 long-0L char-'\u0000' float-0.0F double-0.0D boolean-false 所有引用类型 null 16. integer 和 long 操作 /和% 的话, 可能会抛出 ArithmeticException,比如除 0。但是 float 与 double 不会,即使是除以 0。 double a=0;a=a/0;则 a 等于 NaN。 17.普通内部类不可以拥有静态变量,但静态内部类可以。 File 类没有 任何 处理文件内容的方法。 InputStream 和 OutputStream 是 抽象类, DataInput 和 DataOutput 是 接口。DataInputStream 实 现了 DataInput 接口。 18.面向对象的特征有哪些方面 ? 答案:最基本特征:封装,继承,多态。
答案:Collection 是一个接口,但 Collections 却是一个辅助类,里面有很多静态的工具方法。而且很有用的。如: reverse(List list);sort(List list, Comparator c)等。Collections 没有实现任何接口。它直接继承了 Object。
Primitive(int,char,long 等)数组是不能互相赋值的,即使它们本身可以。
一个 Constructor 可以抛出任何异常。
初始化块是按照声明的顺序执行的。
所有关于 NaN(Not a Number) 和 non-NaN 的比较,都返回 false. 这条很重要。
==会产生编译错误,如果两边类型不匹配的话。
6. Math,String 是不可继承的。(final 类)
Instanceof 后面跟的应该是 OBJECT。
构造器可以是私有的。(private)
=与==意义是完全不同的。一个是赋值,一个是等于。
全局变量可以不进行初始化,如果使用一个局部变量,则这个局部变量要被初始化。
7. 在 try-catch-final 块中的退出语句。
其他特征:抽象关联,聚合,组合,内聚,耦合 19.String 是最基本的数据类型吗? String 和 StringBuffer 的区别? 答案:String 不是一最基本的数据类型。 STRING 的长度是不可变的,STRINGBUFFER 的长度是可变的。如果你对字符串中的内容经常 进行操作,特别是内容要修改时,那么使用 StringBuffer,如果最后需要 String,那么使用 StringBuffer 的 toString()方法 20.int 和 Integer 有什么区别 答案:int 是基本类型。Integer 是引用类型。Integer 可以把 String 转换成 int。 21.运行时异常与一般异常有何异同? 答案:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是 一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 获的运行时异常。 22.说出一些常用的类,包,接口,请各举 5 个? 答案:常用类-System,ArrayList,FileInputStream,Thread,Socket. 常用的包-java.io,java.util,java.sql,java.javax.naming,java.net 常用接口-Collection,Connection, Cloneable, Comparable, Serializable 23.说出 ArrayList,Vector, LinkedList 的存储性能和特性. 答案:ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素, 它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,
4. 初始化了一个没有 run()方法的线程类,是否会出错?
答案:不会。
第一种方法:直接继承 Thread 类。
public class Test { public static void main(String[] args) { ThreadClass t = new ThreadClass(); t.start(); System.out.println("end");//输出“end” } } class ThreadClass extends Thread //Thread 类已经实现了空的 run()方法。 { } 第二种方法:实现 Runnable 接口
public void run() //必须有此方法否则编译报错。它是 Runnable 接口中的抽象方法。 { System.out.println("Threads"); } } 4. 局部内部类是否可以访问非 final 变量?
答案:不能访问局部的,可以访问成员变量(全局的)。
class Out { private 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 final System.out.println(name);//ok. } } Animal local = new Animal(); local.eat(); } } 5. 选择语句 case 中,允许使用的值有哪些? 答案:int,short,char,byte(都在 int 范围之内,且是整数)
1. 在 main(String[] args)方法内是否可以调用一个非静态方法?
答案:不能
2. 同一个文件里是否可以有两个 public 类?
答案:不能
3. 方法名是否可以与构造器的名字相同? 答案:可以。
public class Test { public Test(String iceboy) { System.out.println(iceboy); } public void Test(String iceboy) { System.out.println(iceboy); } public static void main(String[] args) { Test a = new Test("abc");//输出“abc” a.Test("iceboy");//输出“iceboy” } }
public class Test { public static void main(String[] args) { int a=1; try { a=a/0; }catch(Exception e) { System.out.println("catch"); return;//当 return 时,finally 中的语句会执行。 //System.exit(0);//若用上这句,finally 中的语句不会执行。直接返回,退出程序。
Vector 由于使用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现 存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
24.设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。写出程序。
13.class Child extends Parents{}
class Parents{}
是否可以这样声明类,在一个文件中?
答案:可以。
14. 数组,无论是当前的,还是类等级的,都会被初始化。
String 是被初始化为 null,不是空字符。
null,““,” “,都是不同的。
“continue”只能在一个循环里(如 for,do,while),它不能在 case 语句中出现。
9. if(-0.0 == 0.0)是相等还是不等?
答案:相等。
10.一个抽象类是否可以没有抽象方法?
答案:可以。
11.RandomAccessFile 类继承 Object,并且实现了 DataInput 和 DataOutput 接口。
答案:正确
12.Collection 与 Collections 的区别?
} finally //当没有 System.exit(0);时,无论是否发生异常它都会执行。 { System.out.println("finally"); } } } 注: try-catch-final 块的顺序不能调换。
8. 下面都是正确的 main 方法签名。
public static void main(String[] args) public static final void main(String[] args) static public void main(String[] args) static public synchronized void main(String[] args) static public abstract void main(String[] args)//错误
注:因为这 4 个线程共享 J,所以线程类要写到内部类中。
加线程:每次对 j 加一。
减线程:每次对 j 减一。
public class TestThreads { private int j=1; //加线程 private class Inc implements Runnable { public void run() { for(int i = 0;i < 10;i++)பைடு நூலகம்{ inc(); } } } //减线程 private class Dec implements Runnable { public void run() { for(int i = 0;i < 10;i++) { dec(); } } } //加 1 private synchronized void inc() { j++; System.out.println(Thread.currentThread().getName()+"-inc:"+j); } //减 1 private 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++)
equals() 返回 false 如果对象类型不同,但不产生 编译错误。
15.Java 成员变量默认初始化的值。 成员变量类型 取值 byte-0 short-0 int-0 long-0L char-'\u0000' float-0.0F double-0.0D boolean-false 所有引用类型 null 16. integer 和 long 操作 /和% 的话, 可能会抛出 ArithmeticException,比如除 0。但是 float 与 double 不会,即使是除以 0。 double a=0;a=a/0;则 a 等于 NaN。 17.普通内部类不可以拥有静态变量,但静态内部类可以。 File 类没有 任何 处理文件内容的方法。 InputStream 和 OutputStream 是 抽象类, DataInput 和 DataOutput 是 接口。DataInputStream 实 现了 DataInput 接口。 18.面向对象的特征有哪些方面 ? 答案:最基本特征:封装,继承,多态。
答案:Collection 是一个接口,但 Collections 却是一个辅助类,里面有很多静态的工具方法。而且很有用的。如: reverse(List list);sort(List list, Comparator c)等。Collections 没有实现任何接口。它直接继承了 Object。
Primitive(int,char,long 等)数组是不能互相赋值的,即使它们本身可以。
一个 Constructor 可以抛出任何异常。
初始化块是按照声明的顺序执行的。
所有关于 NaN(Not a Number) 和 non-NaN 的比较,都返回 false. 这条很重要。
==会产生编译错误,如果两边类型不匹配的话。
6. Math,String 是不可继承的。(final 类)
Instanceof 后面跟的应该是 OBJECT。
构造器可以是私有的。(private)
=与==意义是完全不同的。一个是赋值,一个是等于。
全局变量可以不进行初始化,如果使用一个局部变量,则这个局部变量要被初始化。
7. 在 try-catch-final 块中的退出语句。
其他特征:抽象关联,聚合,组合,内聚,耦合 19.String 是最基本的数据类型吗? String 和 StringBuffer 的区别? 答案:String 不是一最基本的数据类型。 STRING 的长度是不可变的,STRINGBUFFER 的长度是可变的。如果你对字符串中的内容经常 进行操作,特别是内容要修改时,那么使用 StringBuffer,如果最后需要 String,那么使用 StringBuffer 的 toString()方法 20.int 和 Integer 有什么区别 答案:int 是基本类型。Integer 是引用类型。Integer 可以把 String 转换成 int。 21.运行时异常与一般异常有何异同? 答案:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是 一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 获的运行时异常。 22.说出一些常用的类,包,接口,请各举 5 个? 答案:常用类-System,ArrayList,FileInputStream,Thread,Socket. 常用的包-java.io,java.util,java.sql,java.javax.naming,java.net 常用接口-Collection,Connection, Cloneable, Comparable, Serializable 23.说出 ArrayList,Vector, LinkedList 的存储性能和特性. 答案:ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素, 它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,