致java

1、你对面向对象的理解是什么?     
面向对象就是将一切具有特定功能的事物抽象出来,封装成对象,当需要用到某功能时,调用者不需要自己实现,只需要调用具备这些功能的对象中的方法即可。面向对象将任务的执行者变成了任务的指挥者。
面向对象包括三个特征:封装、继承、多态
    
2、 数组和集合有什么区别?
数组:长度固定,数据类型统一,可以储存基本数据类型和引用数据类型
集合:长度可变,存储的数据类型可以不统一,只可以存储引用数据类型


3、 讲讲集合的整个框架以及相关的内容?  
java中的集合有两种,包括单列数据的Collection和拥有key-value的map两个顶层接口。
Collection接口下面有两个子接口:有序的list和无序的set(这里的有序和无序指的是存取数据是有一定顺序)。
list接口下又包括2个常用的实现类:ArrayList、LinkedList;
set接口下又包括3个常用的实现类:HashSet、LinkedHashSet、TreeSet;
map接口下又包括4个常用的实现类:HashMap、LinkedHashMap、TreeMap、Properties。


4、在枚举中,可以使用抽象方法吗?
可以


5、什么时候会用到泛型?举例说明下
当创建集合对象时需要用到泛型,例如:List<Integer> list = new ArrayList<Integer>();
可以避免运行时抛出ClassCastException异常,泛型的应用使得错误的出现提前到了编译期间。


6、讲一讲反射的概念和应用
反射可以获得一个类的所有信息,包括方法和属性。
其中,获得方法包括获得方法的名称,方法的返回类型,方法的访问修饰符,以及通过反射执行这个方法。
其次,获得属性包括属性的名称,类型,访问修饰符,以及这个属性的值。


7、 如何获得字节码文件?
1.类名.class
2.创建对象,并调用对象.getClass()
3.调用Class.forName("类名")


8、讲一讲代理是什么?如何运用?
为其他对象提供一种代理以控制对这个对象的访问。在一些情况下客户不想或者不能直接引用一个目标对象,
而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。


9、讲一讲单例模式
单例模式就是堆内存中至始至终只能创建一个对象。
单例模式的实现方法包括:
1.创建一个私有的静态的对象
2.构造方法私有化
3.定义一个公有的方法获取这个对象
有懒汉式和饿汉式两种模式,其中懒汉式有线程安全问题


10、你还知道其他的设计模式么?分别介绍一下
享元模式,Integer内中的自动装箱
Integer i1 = 12;
Integer i2 = 12;
sop(i1 == i2);  //true
Integer i1 = 128;
Integer i2 = 128;
sop(i1 == i2); //false
java1.5以后Integer的赋值在一个字节内直接赋值,不重新创建对象,就叫享元模式


装饰者模式,BufferedReader等这些就是采用了装饰者模式


工厂模式,单例模式,动态代理等。



11、 java的特点是什么?
面向对象,跨平台。


12、如何实现多线程的?
将线程任务继承Thread类或实现Runnable接口,并重写run方法,将线程任务封装到run方法中。
然后在另一个类中创建一个任务对象,然后将线程任务对象封装到Thread对象中,最后调用start
方法启动现成即可。
例如:
ThreadTask task = new ThreadTask();
Thread t1 = new Thread(task);
t1.start();


13、如何使用字节流?
1. 读入
键盘输入,将键盘上输入的信息读取到缓冲区中:
InputStream in = new BufferdInputStream(System.in); 
int ch = in.read();


读取文件,将文件中的信息读取到内存中:
FileInputStream fis = new FileInputStream("from.txt");

2. 写出
控制台输出,将缓冲区中的信息打印到控制台上:
OutputStream out = new BufferedOutputStream(System.out);
out.write(ch);
out.flush();


写入文件,将内存中的信息写入到指定文件中:
FileOutputStream fos = new FileOutputStream("to.txt");
byte[] buf = new byte[1024];
int ch = -1;
while((ch = fis.read(buf))!=-1){
fos.write(buf,0,buf.length);
fos.flush();
}

14、什么时候会用到转换流呢?
1.当字节和字符之间有转换动作时。
        2.流操作的数据需要进行编码表的指定时。


15、final,finally,finalize的区别
final:常量修饰符
finally:异常处理中,将必须执行的代码放入其中
finalize:JVM垃圾回收器调用此方法回收垃圾


16、什么是递归
函数在运行过程中直接或间接调用自身而产生的重入现象


17、类加载器
每个类都有自己的类加载器,
一般当前线程会调用自己的类加载器加载线程,如果类A中引用了类B,则jvm会
调用类A的类加载器加载类B,也可以自己创建加载器加载;
当前类调用自己的类加载器加载,会先委托父类加载器加载,父类也会委托自己的父类加载器加载,
如果都没加载到,则返回当前类的类加载器,还是没加载到,则报错,不会去找子类;


18、配置环境变量的时候,为什么需要配置path和classpath
配置path是为了在任何目录下都可以使用javac 和 java 命令;
配置classpath是为了在使用javac 命令时,系统可以找到.class文件


19、类加载
将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,
然后在堆区创建一个这个类的java.lang.Class对象,用来封装类在方法区类的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值