Java习题总结——基础才是最重要滴

来源:互联网 发布:沈阳飞客数据 编辑:程序博客网 时间:2024/05/17 10:38

字符串的有关问题

   1new String (“A”);实际上是创建了两个对象, 一个在常量池中,另一在Heap中。

   2)常量池 String =””  这里面无论是字母还是数字都是相当于常量池,在编译时期就已经确定了。他们指向的是同一个对象!

   3)若 String s= s1+s2即时 s1S2是编译时期的确定常量,但是因为在编译时期s1s2 不确定所以,s 并不是常量池中的,而是创建了新对象!!。

3.String 内部使用Private final char Value创建的字符串,因此当String改变时,等同于创建了一个新的对象!而StringBufferString类型改变是操作的同一个对象.

4.String 作为形参传入,只是在内部复制,不会对方法外的字符串产生影响。(推荐做法画图 处理StringBufferString形参引用分析对实际值操作)。

5.Int 类型无法直接转成String

6.Str =”helloword”; str+=’a’; 这是正确的! 但是加字符串就要用双引号。

7.StringBuffer 是线程安全的,StringBuilder不是。

8.substring 方法 截取从0开始有头无尾。

8.SubString() 截取字符串方法,源码是new了一个新的字符串,并且是按char计算的。

 

初始化问题:

1.父类中的静态成员变量和静态代码块(按照代码的先后顺序执行)。

  子类中的静态成员变量和静态代码块(同上)

 父类中的普通成员变量和代码块, 父类构造函数。(普通成员变量的初始化先于构造函数!)

 子类中的普通成员变量和代码块,子类构造函数。

2.静态块> main()>构造块>构造方法

3.实例变量 也就是成员变量,没有初始化则会有初始值。

4.包装类型 例如:Byte作为成员变量初始化,是对象的引用,所以初始化值不是0而是NULL

 

构造函数问题集:

1.子类构造函数调用父类构造函数必须放在首位! 不然会报出Compiletime Error

2.子类构造函数不会显示的调用父类有参的构造函数,当子类构造函数没有指明用父类哪个构造函数时,只会会默认调用父类无参构造函数,如果父类没有无参构造函数,会报错!所以要么子类指定父类有参构造函数,要么父类有无参构造函数。

3.注意子类是否明确的指明调用父类的哪个有参构造函数!如果没有才会调用无参的!

4.构造函数不可以被重写。

5.构造方法不需要同步化。

 

异常问题:

1.Catch块只要触发一个就后面就不会执行了。

2.只要捕获一种异常后面更高级的异常 就不会捕获了。

编译时期的异常:

Classnot find

Clonenosupport..

IoException ->fileNotFound!!,unkonwhost,.....这些异常需要trycatch处理需要在编程时声明。

运行时期异常不需要声明:

RuntimeExctption ->class cast ,nullpointer,,indexoutofBounds,illgelArgument.......

3.Runtime 异常理论上不应该被拦截!

4.Try中有return finally会在return,和throw之前执行。

5.发生异常会跳出循环!

6.Try块中可以自己抛异常。被下面的catch块捕获

7.异常的继承结构。

Throwble---ERROR,

        ---Exception----IoException - FilenotFind ...(此处的异常需要进行自行的TryCatch)

                  ---RuntimeException-类型转化,数组越界,等异常不需要捕获。

8. throw 方法内部抛出,

   throws  方法上声明。       Throws用于抛出异常对象? 错

 

访问限制符问题:

1.类成员变量私有化,子类对象可以调用吗? 可以

2.abstact 声明的类可以被抽象类继承 ? 对。只能被继承? 错 ,还可以被声明。

3.abstact double b; ?错  抽象没有变量!

3 static 变量可以被类中任意方法使用,而Static方法使用的变量只能是static变量。特别注意main函数是static方法!

4抽象类中 可以 不存在任何抽象方法!

5.抽象方法无方法体。

6.Native 是方法修饰符, abstact方法 和Interface方法不能被该修饰符修饰。

数组问题:

1.声明数组不能指定长度?

2.数组的两种声明方式: int[] i; 或者 int i[]; 多维数组,int  []iArray[];也是可以的。

3.java 实现了真数组,避免了数据覆盖的可能? 对, 不是避免了数据覆盖类型的可能!

4.数组是一种原生类?错 ,数组是引用类型,不属于原生类 ,原生类是那几基本数据类型包装类。

5.数组是一种对象?对

6.Int m[ ] ={0,1,2,3,4,5,6,7}; m.length 是属性, m.length-1 是数组下标的最大值。

7.几种数组复制的方式,效率最高的是,sysytem.arrayCopy(); Array.copyof不如上面的,clone()一般是效率最低的。

 

接口问题:

 

1.接口中方法,默认的修饰符是:public abstract .

接口中的变量,默认的修饰符是:public static final .

2.接口不可以被实例化。

3.接口中可以含有非抽象方法:java 8新特性 ,主要都是非抽象方法。

4.抽象类可以有构造方法,接口不可以有? 对

5.接口中不允许有Static方法? 对

6.接口可以被声明?对

 

基本数据类类型转换问题:

 

转换的大小级别:

1.Byte ,short, char, int ,long , float ,double

   从下往上转型  自动就可以转换

 而从上向下转型, 则需要强制转换

 

2. 在运算时, byte short  char都会自动向上转换为Int类型进行 计算。

 

3.注意:Byte一个字节8位,Short int 2个字节16位,Int 4个字节32

 采用二进制,从低到高截取,第一位为符号位!

 例如 short  a =128;

      Byte  b=(byte)a;

 处理后a =128 ,b =-128;

4.int i=0;

  Integer j=new Integer(0);

  I== j; //返回 true ,因为发生了自动拆装箱,比较的是是数值。

5.三目运算符会发生类型转换问题。特殊情况:当一种类型包含另一种可以不用转。输出的是大类型的。

6.三目运算符特殊转换:当有一个是常量表达式(例如是一个数字int),另一个是类型T,而常量可以被这个类型T表示时,输出的结果是T类型的。(例如T类型是Char因为int可以被char转化表示)

7.三目预算符的优先级小于==号 :eg:

  true?false: true=-true?false:true 想当于先是 true?false : true?false:true

  而三目运算符是从右向左进行的执行顺序, 因此先进行后面的运算。

8.Short s=1; s=s+1; 这是错误的, 发生了类型转换 ,此时S将要被赋予的值是Int类型!

9.Float 2=1.0 ; //错误,默认浮点数是Double类型的。

10.原生数据类型包括:byte short int char long float boolean double。没有String!

11.Byte 是引用类型的 而byte是基本数据类型 同理其他包装类

12.Int 可以和Integer类型相互比较是可以发生自动拆装箱,而 包装类之间相互比较时并不能自动拆装箱,而是纯粹的引用数据类型对象之间的比较,IntegerLong Double之间不会自动拆装箱,equals方法也不会发生任何的数据转型!

 

Final  常量问题:

1 最终类可以无最终方法? 正确

2 常量值相加,则无需进行类型转换。

例如: byte b1=1 ,b2=2 ,b3, b6 ;

Final byte b4 = 3, b5=4 ;

其中,如果 b6=b3+b4; 这段语句是正确的。因为是常量相加,值已经确定了。不需要类型转换。

b6= b1+b2 ; 则报错, 需要类型转换。

3. final 变量赋值,只能在构造函数中或定义时赋值。

4. final 修饰的类型变量 定义时一定要进行初始化,或者在构造函数中初始化。

 

重载和重写:

重载 :只需要方法名一至,其他的, 返回值,参数列表,访问权限符 等随便折腾.

只返回值不同,不能算作重载。

 

重写 :方法名,参数列表需要相同。 返回值小于等于父类返回值,访问权限和异常大于等于父类。返回值类型必须相同或相容。

Main方法可以进行重载,但是,函数的入口只有一个并且形式只能是固定的那种!

 

 

线程有关问题:

1.Sleep()是thread类中的,waitobject中的。

2.Wait 会放弃对象锁,而sleep不会

3.Wait方法后放弃对象锁,只有当次对象调用notify或者,notifyall,后本线程进入对象锁定吃,准备获得了对象锁后,才进入到运行状态。

4.结束一个线程不建议用stop()方法。

5.wait()sleep()方法需要进行try/catch操作。Wait方法会抛出InterruptedException异常。

6.suppend()方法终端线挂起,使线程进入阻塞状态。并且不会自动回复

7.socket(adress,int port);.             ServerSocket(int port); 监听端口在服务端。

8.一个完整的URL包括4部分,协议名称,主机地址,端口地址,文件。

9.socket 获取本地IpgetLoctAdress.   获取连接ip getInetAddress.

10.start 是线程启动方法。 Run是线程运行方法,suspend s是线程挂起方法。

11.ThreadLocal 是继承自 ObJect的 并不是一个Thread而是一个Thread的局部变量,TreadLocal中定义了一个HashMap用于保存每个线程的变量副本!作用:数据独立,为每个线程维护了自己独有的数据拷贝!。作用是线程之间的数据共享?错

12.非原子操作: 需要先读取数据在操作。这种操作需要同步。Eg:x=y; x++:++x;

13原子操作一步操作这种不需要同步:eg: x=3;

14 java 用监视器 机制实现了进程之间的异步执行。

 

多态:

1.可能要发生多态时,当调用的方法是static方法,这时跟对象无关,只会调用引用类型的方法。

2.可能发生在构造函数中,调用方法时发生多态,这时看new的对象有没有,该方法,有就调用对象的方法。

 

 

集合类问题:

Collection 接口下:

List:符合线性表特点

 Arraylist 默认长度是10,指定大小创建就是指定大小的长度了

 LinkedLIst :便于插删。

Set:

   HashSet  散列函数: hashcode有关

   TreeSet  同上,带排序 ,红黑树

Queue:

Map接口下:

Hashmap: 允许null key value;当同 Key时发生覆盖认为是一个对象 不同步!

 Hashmap contains方法!有containkey();方法.通过链式法解决冲突!

使用Iterater.,重新计算hashcode值。

Keyvalue都是存储在Entry数组中的

HashTable: 同步,不允许null;  使用EnomerationIterater。直接使用hashcode

TreemapL

 

1. Linkedlist ,Arraylist, 不是线程安全的 对应 vector是线程安全的, Vector继承自collection接口。

2. TreeSet,Hashset也不是线程安全的。

3. Collection Collections  :

   Collection JavaUtil下的:(接口),他是各种集合的接口的父类

   Collections JavaUtil下的(类),包含有各种有关集合操作的静态方法。

 

 

 

 

 

 

 

垃圾回收机制:

1.年轻代,老年代,持久代(javaclass Method ,静态数据等),分代回收。

2.两种算法,年轻代分为两个区,当一区域满后,到第二个区,等GC过后满仍存活的对象放入老年代,采用复制算法。

3.老年代采用,标记整理,整理出内存,FullGC进行回收,自己如果还是装不下就抛出异常。

4.采用有向图的方式,主线程为起始点, 当某个点不可达,则说明这个点可以被垃圾回收了,没有指向它的引用。

5.内存泄漏的引起,(1)对象是可达的,(2)对象是无用的.

 

其他问题:

1.序列化如何实现?

 实现sevializabel 接口后OutputStream ,ObjectOutputStream

2.一个以Java为后缀的源文件,只能有一个与文件同名的类,可以包含其他类!

3.类的加载过程包括:加载,验证,准备,解析。类方法的解析属于类的加载过程

4.Java 关键字中无:truefalsenull .

5.i=i++; 值还是i; i=0 ; j=0; i=j++;值还是 0

6.getDeclaredMethod() 获得的是所有方法对象!

7.内部类没有层数限制。 内部类修饰符可以有4种 而正常外部类只能有两种public或无

8.&& & 做没做优化处理 &是且,&名字叫按位与,&&名字叫逻辑与。

9.Jvm内部用Unicode编码,无论是中文还是英文字符,都占两个字节!

10.1enth 是数组的属性! 是String的方法length();

11.Getclass().getName() 返回的类名 是带包名的!没有后缀 .class

12.Java 调试器 jdb.exe;

13.Math.floor(x)方法 返回小于等于x,最接近的整数值,返回类型为double  -8.5返回-9

14.System.in 创造 inputStream, System.out创造 outputStream.

15.object类中没有clone()没有sleep方法。

16.如果父类synchronized 方法被覆盖了子类也要synchronized;一个子类不可以覆盖父类的同步方法。

 

 

 

 

面向对象5大原则:

1单一原则

2开放封闭

3里式替换

4依赖倒置

5接口隔离

其他不知道的问题:

17.Java数据库存储能力的包:java.sql ,没有db包。

18.INTEGER,FLOAT Double,都继承自Number类。

19.使用transient修饰的变量不会被序列化。

20.加载驱动程序的方式?

21.Webservice 通信机制实质是josn数据交换。

22.Java并发操作?

23.事务隔离级别?

24.优化Hibernate

25.合法标识: _$ 以字母开头, 带空格,*不行。

26.只有整形才能使用的运算符号 %

27. 左移位》右移位 >>>右无符号移位 ,<<<没有此 符号!

28.Java程序编译后会产生:

29.Jdbc 用的设计模式:桥接模式。

0 0
原创粉丝点击