以下内容均来自网络,并附上主要内容链接,侵删!原文链接
1. 简单讲一下Java的跨平台原理
答:由于非跨平台的情况下,对于不同的操作系统,那么就需要开发几套不同程序代码。为了解决这个问题,java通过不同系统,不同版本,不同位数的JVM来屏蔽不同的系统指令集差异而对外提供统一的接口(JavaAPI),所以这样对于我们普通的开发者来说,只需要开发符合Java规范的程序即可。如果程序需要部署到不同的操作系统,那么我们只需要按照对应版本的虚拟机即可。
那C语言为什么不能跨平台呢?
首先回忆一下C语言的执行过程,编译一个hello.c的程序需要经过四个阶段:预处理,编译,汇编和链接。预处理阶段执行程序中#开头的命令并执行相关操作,编译阶段将上一步处理结果翻译成汇编程序,汇编阶段将汇编语言翻译成计算机可以识别的二进制指令。由于不同的CPU对二进制指令识别的意义是不同的,所以说C语言不能实现跨平台运行。Java语言的平台无关性在于Java虚拟机在不同的平台上是不同的,我们写好的.java文件统一编译成特定格式的.class文件,在不同机子上的JVM上执行结果是一致的。
2. java开发环境的步骤
答:需要的内容:对应操作系统的JDK、对应版本位数的IDE(开发工具,比如Eclipse或者IDEA)、服务器(web项目需要配置,如tomcat,jetty)。
步骤:
(1)下载JDK,并且配置好Java_Home这个环境变量,因为对于开发工具和Tomcat都需要依赖这个配置变量。
(2)下载IDE,正常解压即可。
(3)下载Tomcat ,正常解压即可,并且将这个集成到开发工具中,便于项目进行发布。 三者的版本要符合规范
3. Java中Int数据占几个字节
4个字节,32位
4. 面向对象的特征有哪些?
答:封装、继承、多态、(抽象)
封装:将客观事物封装成抽象的类,并且可以通过protect、private、public对外部对象的访问进行控制。
继承:子对象可以继承父对象的属性和方法
多态:重写和覆盖
5. 拆箱和装箱
答:装箱:就是基本数据类型转换成对应的包装类型。
比如:int x = 5 ; -----Integer y = x ; (这是自动装箱)
实际上进行的是:Integer y = Integer.valueOf(x); (这是手动装箱)
拆箱:就是包装类型转换成对应的基本数据类型。
比如:Integer a = 5; -------- int b = a ; (这发生了自动拆箱)
实际进行的是:int b = a.intValue() ; (手动拆箱)
那么,基本数据类型和包装类型有什么区别呢?原文
- 在 Java 中,一切皆对象,但八大基本类型却不是对象。
- 声明方式的不同,基本类型无需通过 new 关键字来创建,而包装类型需 new 关键字。
- 存储方式及位置的不同,基本类型是直接存储变量的值保存在栈中能高 效的存取,包装类型需要通过引用指向实例,具体的实例保存在堆中。
- 初始值的不同,包装类型的初始值为 null,基本类型的的初始值视具体的类型而定,比如 int 类型的初始值为 0,boolean 类型为 false。
- 使用方式的不同,比如与集合类合作使用时只能使用包装类型。
6. 有了基本数据类型,为什么还需要包装类型?
答:Java是面向对象的语言,而基本数据类型没有面向对象的特性,而且包装类型存在缓存,这样能够更加好的利用资源。(比如,Integer的缓存内容就是-128--------127)
Integer的最大值+1与Integer的最小值-1不会溢出
7. equals和==的区别 参考
‘==’:判断两个对象是否为同一个引用(即首地址)或者基本数据类型是否相等Equals:判断两个对象的内容是否一样,这个一般是用于引用对象的比较的使用。
8. 实现一个拷贝文件的工具类,使用字符流还是字节流
使用字节流,因为我们拷贝的文件中,可能有图片,图像,如果使用字符流就无法进行拷贝,所以为了工具类的实用性,采用字节流更好。
9. 简单说一下forward和redirect的区别
相同点:都是对请求进行处理
不同点:
(1)forward是发生在服务器端,效率更好,而redirect是发生在了客户端
(2)forward是请求转发,只是一次请求,而redirect是相当于了两次请求
(3)Forward不会改变客户端的URL显示,而redirect会改变客户端的URL的显示
10. servlet的生命周期
答:加载servlet的class---》实例化Servlet-----》初始化servlet(调用init方法)------》调用服务service方法(处理doget和dopost方法)-----》servlet容器关闭时调用销毁方法(destory方法)