java基础
来源:互联网 发布:淘宝toto真假 编辑:程序博客网 时间:2024/06/05 18:52
1、面向对象的特性
抽象、 继承、多态、封装
2、基本数据类型
8种。byte、short、int、float、double、char、boolean、long
3、String 、StringBuffer、StringBuilder区别。
String 是字符串常量,指向的字符串内容不能改变
StringBuffer、StringBuild是字符串变量,内容可以改变。
StringBuffer线程不安全;StringBuild线程安全
4、Servlet的生命周期
Servlet被实例化时调用init()方法,请求到达后,调用service()方法,service()然后调用相应的doGet(**)方法。
当容器销毁Servlet实例时,会调用destory()方法
5、forward 和redirect的区别
1.从地址栏显示来说forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说forward:转发页面和转发到的页面可以共享request里面的数据.redirect:不能共享数据.3.从运用地方来说forward:一般用于用户登陆的时候,根据角色转发到相应的模块.redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.4.从效率来说forward:高.redirect:低.6、a+=b --> a=(a.Type)a+b;//返回的是a类型 a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型
7、抽象类是否可继承实体类?
答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数
答案很明确,可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
8、Java线程具有五中基本状态
新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();
就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;
运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;
阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
2.同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
3.其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
9 浅谈:request,session,application
作用域::
request < session < application
各自对应的接口
javax.servlet.ServletRequest 其子接口:javax.servlet.http.HttpServletRequestsession对象 对应的接口 :javax.servlet.http.HttpSession
application对象 对应的接口 :javax.servlet.ServletContext
三者共有的方法:
setAttribute(String name , Object o ) ,getAttribute(String name) ;
request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。
备注: session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。(session底层依赖于cookie)
Application(ServletContext)
作用范围:所有的用户都可以取得此信息,此信息在整个服务器上被保留。Application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据。ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb应用只创建一个ServletContext对象,所有的客户端在访问服务器时都共享同一个ServletContext对象;ServletContext对象一般用于在多个客户端间共享数据时使用;
备注:服务器只会创建一个ServletContext 对象
10、成员变量的默认值
public class A{ int i;//默认0 final int j;/*final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"*/}
11、什么时候用到序列化
序列化是一种用来处理对象流的机制 ,所谓对象流就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。什么时候使用序列化:a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;b)当你想用套接字在网络上传送对象的时候;c)当你想通过RMI传输对象的时候;
12、8种基本数据类型的常量池
1>不使用new关键字
Boolean这个就true和false,这个很容易理解。咱们这里可以以Integer为例进行讲解,它是对它进行了缓存,范围是[-128,127],只要是这个范围内的数字都会缓存到这个里面,做成常量池进行管理。我们来看一个实例:
public class test {public static void main(String[] args) {Integer i1=10;Integer i2=10;System.out.println(i1==i2);}}2>.使用new关键字,如果使用了new关键字就是在堆内存中开辟了一块内存。每次new一个都是在堆中开辟一块内存,我们可以这样理解,就像我们自己吃苹果,每次都是new一个,我要吃个新的,不要旧的。所以每一个的地址都不一样。
3. 没有实现常量池的Float和Double
13、释内存中的栈(stack)、堆(heap)和静态存储区的用法。
答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、“hello”和常量都是放在静态存储区中。栈空间操作最快但是也很小,通常大量的对象都是放在堆空间,整个内存包括硬盘上的虚拟内存都可以被当成堆空间来使用。
String str = new String(“hello”);
上面的语句中str放在栈上,用new创建出来的字符串对象放在堆上,而“hello”这个字面量放在静态存储区。
补充:较新版本的Java中使用了一项叫“逃逸分析“的技术,可以将一些局部对象放在栈上以提升对象的操作性能。
14、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?
答:都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的
答案:是
解析:线程分为守护线程和非守护线程(即用户线程)。
16. 下面哪个流类属于面向字符的输入流( )
A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader
答案:D
解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。
面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。
面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。
总结:以InputStream(输入)/OutputStream(输出)为后缀的是字节流;
以Reader(输入)/Writer(输出)为后缀的是字符流。
扩展:Java流类图结构,一目了然,解决大部分选择题:
解析:Java创建对象的几种方式(重要):
(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。
- Java基础01:基础
- Java基础:基础加强
- Java基础-基础
- java基础的基础
- JAVA基础---基础常识
- Java基础:基础加强
- [Java 基础]基础语法
- Java基础
- java基础
- java 基础
- java基础
- Java基础
- Java基础
- Java基础
- JAVA基础
- JAVA基础
- JAVA基础
- java基础
- xmysql:可为MySql生成REST API的神奇命令
- Linux 一些常用命令
- Flume持久化本地sink配置
- Unity 中使用百度语音识别发布Android程序(一)
- 内存对齐方式及结构体的存储
- java基础
- [FAQ12947][Recovery]Update LOGO&LK&PRELOADER via OTA upgrade
- ADO .NET访问数据库(一)
- 编写一个学生类Students,该类成员变量包括学号no、姓名name、性别sex和年龄age,该类的成员方法有genNo()getName ). * getSex().getAge().和setA
- Mac 安装mysql以及python驱动
- Eclipse所有历史版本下载地址列表:
- OpenGL
- python while 循环
- numpy.array 和 array以及list的效率对比