JavaBean
1、什么是JavaBean?
一个可以重复使用的软件组件,是遵循一定标准、用java语言编写的一个类,该类的一个实例称为JavaBean,简称bean(非可视化的javabean)
2、编写bean
3、如何在JSP中使用javabean标签?
第一种方式: 通过嵌入代码访问JavaBean
第二种方式:访问 JavaBean的JSP指令和标签
MVC
1、什么是MVC?
模型—视图—控制器,是一种设计模式
模型:用于存储数据的对象
视图:向控制器提交所需数据、显示模型中的数据
控制器:负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出处理,并将有关结果存储到模型中;同时负责让模型和视图进行必要的交
互,当模型中的数据变化时,让视图更新显示。
2、MVC的优点
3、基于Servlet+JSP+Javabean的MVC架构应该如何实现?
Web开发基础
1、信息服务方式?
用超文本传输协议HTTP(Hyper Text Transfer Protocol)传送
数据以超文本标记语言HTML(Hyper Text Markup Language)组织
2、URL组成部分?
URL由协议名、Web服务器地址、路径名和文件名四部分组成
3、HTTP、HTML和URL之间的关系
- 浏览器会通过超文本传输协议(即HTTP)从Web服务器上将站点的网页代码提取出来,这个代码就是HTML 超文本标记语言(是由服务器(HTTP)返回),当浏览器接收到HTTP 服务器的响应之后,会对接收到的 HTML 代码进行解析和渲染,然后呈现给用户。
4、Web工作模式
采用B/S即浏览器/服务器模式,网站也是软件,也是一种具体的软件应用。
5、静态网页与动态网页的区别:Web服务器的处理方式不同
静态网页:标准的HTML文件,其文件扩展名是.htm或.html。
静态网页的工作原理:当在浏览器里输入一个网址回车后,就向服务器端提出了一个浏览网页的请求。服务器端接到请求后,就会找到要浏览的网页文件,然后发送到客户的浏览器,由浏览器对该网页文件进行解释,并将结果显示在浏览器窗口中。
不能实现用户与服务器之间的交互
保存在网页服务器的硬盘空间中
是一个独立的个体
不能直接获取数据库中的信息
静态网页不是指网页中的元素都是静止不动的,而是指网页文件中没有程序代码,只有HTML(超文本标记语言)标记
动态网页:网页文件含有服务器端脚本。
当用户在浏览器里输入一个动态网页网址回车后,就向服务器端提出了一个浏览网页的请求。服务器端接到请求后,首先会找到要浏览的动态网页文件,
并执行该页中的服务器端脚本将脚本程序代码转换为静态网页内容。最后将整个静态网页发送给用户。
6、Web服务器与应用服务器
Web服务器:通过响应HTML页面来处理HTTP请求(Apache)
应用服务器:一个创建、部署、运行、集成和维护多层分布式企业级应用的平台(Tomcat)
7、HTML表单
动作:指定用于处理该表单的动态或脚本的路径
方法:选择将表单数据传输到服务器的方法。表单“方法”有“POST”和“GET”,默认为GET方法。
Tomcat
1、Tomcat的端口号
(1)8080是Tomcat服务器的默认端号口。
不写上:8080的话,http的默认端口是80
(2)如何更改Tomcat的端口号
修改Tomcat服务器的conf目录下的主配置文件server.xml可以更改端口号
Servlet
1、Servlet不能独立存在,必须放在Servlet容器(Tomcat)中才能工作,Servlet在web容器中运行,不可在虚拟机中运行。
2、Servlet是一个java类,是一种运行在支持java应用服务器上的web组件。它与普通java类的区别在于它是一个专门处理请求和响应的java类
3、 Servlet API
(1)Servlet容器可以创建实现ServletRequest和ServletResponse接口的对象,在Tomcat(服务器)中实现了接口。所以说,实现了接口就相当于符合规范,就可以做服务器。
(2)常用接口有:Servlet、ServletRequest、ServletResponse、HttpServletRequest、HTTPServletResponse
- Servlet和ServletRequest、ServletResponse之间虚线的意思是:Servlet引用/依赖于ServletRequest、ServletResponse。Servlet接口中用到ServletRequest和ServletResponse作为形参。
- HttpServletRequest是ServletRequest的子接口,HttpServletResponse是ServletResponse的子接口。
(3)常用类有:HttpServlet
主要方法有:
init:负责初始化Servlet对象
doGet:处理GET方式请求(直接在浏览器地址栏输入URL向服务器发送一次请求)
doPost:处理POST方式请求(通常是客户端通过一个表单把信息提交给服务器)
service:根据用户请求方式的不同(GET或POST,把请求分发到doGet或doPost方法)处理客户的请求
destroy:负责释放Servlet对象占用的资源。该方法仅执行一次,在Servlet容器停止执行该方法
(4)get 和post 的区别?【基础】
答:Form 中的get 和post 方法,在数据传输过程中分别对应了HTTP 协议中的
GET 和POST 方法。二者主要区别如下:
- Get 将表单中数据按照variable=value 的形式,添加到action 所指向的URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在form 的数据体中,按照变量和值相对应的方式,传递到action所指向URL;
- Get 是不安全的,因为在传输过程,数据被放在请求的URL 中;Post 的所有操作对用户来说都是不可见的;
- Get 传输的数据量小,这主要是因为受URL 长度限制;而Post 可以传输大量的数据,所以在上传文件只能使用Post;
- Get 限制Form 表单的数据集必须为ASCII 字符,而Post 支持整个ISO10646字符集;
- Get 是Form 的默认方法。一个表单到底是调用get方法还是post方法,要看客户端发什么样的请求了
(5)Servlet的doGet和doPost方法说明
① 如果不论用户请求类型是Post还是Get,服务器的处理过程完全相同,那么可以只在doPost方法中编写处理过程,而在doGet方法中再调用doPost
方法;或只在doGet方法中编写处理过程,而在doPost方法中再调用doGet方法。
② 如果根据请求的类型进行不同的处理,就需在两个方法中编写不同的处理过程。
③ 注意:用户请求为Get和Post方式时浏览器地址栏显示的内容不同。
浏览器中写?传参数的方式都是get方式的,get发送的数据在URL中是可以看出来的。“?”之后,全部都是自己传递的参数。“=”前面是参数名,“=”后面是要传入的参数值。例如:?from=360,意思从360转过来的。表单中既可以通过get方式发送请求,同时也可以post方式发送请求。但是,表单主要是以post的形式发送。
4、HttpServletRequest
(1)作用:包含了客户端请求的信息,可以通过实现该接口的对象取得客户端的一些信息
(2)主要方法
getParameter:获取客户以GET方式发送的参数或者以POST方式提交的form表单的控件值
getParameterValues:如果有多个同名或参数,则该方法可以获得对应的多个参数值,并且放到一个String数组里,如复选框集
5、HttpServletResponse
(1)作用:Servlet通过该对象及其方法可以向客户端浏览器返回结果
(2)主要方法:
setContentType:在给调用者发回响应前,必须用该方法来设置HTTP响应的MIME类型。response.setContentType("text/html;charset=gb2312");
getWriter:返回PrintWriter对象,利用该对象把Servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的Unicode编码字
符转换成正确的编码以使客户端能够阅读
getOutputStream:返回ServletOutputStream(java.io.OutputStream的子类)。此对象向客户发送二进制数据
6、Servlet容器的工作原理
Servlet容器属于java应用服务器的范畴,负责处理客户的请求。当客户请求到来时,Servlet容器获取请求,然后调用某个Servlet,并将Servlet的执行结果返回给客户。
7、容器在Servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理
8、若容器关闭重启或者Servlet类内容产生变化,则这个内存中的实例就会被销毁并在下一次被请求时重新被创建
9、共享变量
(1)定义:HttpServlet类的子类可以声明某些成员变量,所有请求该Servlet的用户共享该Servlet的成员变量
(2)原理:容器在Servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理
10、重定向与转发
(一)如何进行页面跳转?两种方式的区别是什么?
在Servlet中通过验证后经常需要跳转到其他页面显示
1. SendRedirect方式 response.sendRedirect(url) (重定向)
2. Forward方式 request.getRequestDispatcher(url).forward (request,response)
(二)两者区别
(1)在Servlet中通过验证后经常需要跳转到其他页面显示
- SendRedirect方式:response.sendRedirect(url)(重定向)
- Forward方式:request.getRequestDispatcher(url).forward (request,response)
- 重定向可以跳转到别的页面
- 转发无法跳转到别的页面
(2)“response的redirect重定向”与“request的forward请求转发”实现不是完全一样的。
重定向最大的一个特点:重定向的目标无法获取用户的请求信息。结束本次用户的请求,发送新的请求给下一个页面,因为此时的请求和用户最初的请求已经不属同一请求了。
转发:继续把当前的请求对象传递给转发后的页面,因此前后可以共用同一个请求对象(共享请求数据,如查询字符串)。
(3)资源是否传递
重定向后在地址栏里最终显示的是重定向以后页面的URL(浏览器URL变化)
转发后在地址栏里最终显示的是转发前页面的URL(浏览器URL无变化)
JSP
1、JSP工作原理
当用户访问一个jsp页面的时候,会向Servlet发出请求,Servlet容器首先将jsp页面转化为对应的java代码,再将其编译为对应的class文件,再生成对象,就可以工作了。
2、为什么JSP页面第一次访问比较慢,但是从第二次访问之后速度变快呢?
第一次访问的时候,没有生成对象,需要编译生成对象,第二次访问的话,因为有对象了,就不再重复前面的过程了,所以会直接返回对象。
3、JSP字节码:最终Servlet对应的编译后的class文件
功能:
(1)把JSP中普通的HTML标记交给客户的浏览器执行显示。
(2)JSP标记、变量和方法声明、Java程序片由服务器负责执行,将需要显示的结果发送给客户的浏览器。
(3)Java表达式由服务器负责计算,将结果转化为字符串,交给客户的浏览器负责显示。
4、JSP表达式
<%= %>表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示
5、声明标识
<%! %>声明全局的变量和方法,作用域:整个JSP页面,所有用户线程共。享JSP页面的成员变量
6、Java代码片段
<% %>程序片中声明的变量称为JSP页面的局部变量,该局部变量在页面后继的所有程序片和表达式有效,多个客户请求一个JSP页面时 , Java程序片将被执行多次,分别在不同的线程中执行,占用不同的内存空间。
7、Java程序片中的局部变量和JSP页面的成员变量的区别是什么
- 每次执行,都会执行Java程序片中里面的代码。但是<%! %>中是,只执行一次,生成对象之后就不再执行了。
- 局部变量是对应的用户都会创建一份,但是成员变量的话,所有用户对应的都是一份
- Java程序片中的局部变量:每个用户访问,每次访问,每次执行都会创建一份
- JSP页面的成员变量只有一份
8、jsp注释
指令标记
1、定义
指令标识:设定整个JSP页面范围内都有效的信息(属性和属性的值),被服务器解释执行
2、语法格式
<%@“指令名“空格”属性1=“属性1的值” 属性2=“属性2的值”>
3、page指令
(1)contentType属性:<%@ page contentType= "text/html;charset=GB2312" %>
属性值的一般格式:
- “MIME类型”,通过MIME指定返回的是什么格式的
- “MIME类型;charset =编码”
- MIME:描述消息内容类型的因特网标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
(2)import属性:<%@ page import = "java.util.**”%>
4、include指令
(1)特点:
静态嵌入:编译阶段完成文件的嵌入。JSP页面要进行转换,转换成java文件,然后再进行编译成class文件,编译阶段就会完成文件的嵌入工作。
(2)语法:<%@ include file= "文件的URL" %>
题目:什么是JSP指令?语法是什么?在何时起作用?(编译)。有哪些常用的JSP指令?(2个)
(1)JSP指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP页面的相关属性。
(2)JSP 指令的一般语法形式为: <%@ 指令名 属性="值" %>
(3)常用指令:page、include
page指令定义JSP页面的一些属性和这些属性的值。它的作用范围是整个JSP页面。
language:该属性用于指定当前JSP页面将使用的语言,当前只能为“Java”。例如:<%@ page language ="java" %>
import:该属性用于指定当前页面需要导入的包或类,与Java程序中的import语句类似。如果需要导入多个包或类,则用逗号隔开。例如:<%@ page import="java.util.*,java.sql.*" %>
contentType:用于指定向客户端输出内容的类型(MIME)。例如:<%@ page contentType = “text/html;charset=utf-8” pageEncoding=“utf-8”%>
include指令的作用是在页面的适当位置整体嵌入另一个文件,在JSP页面上出现该指令的位置处静态嵌入一个文件
静态嵌入:编译阶段完成文件的嵌入。
语法:<%@ include file="……" %>
优点:采用JSP的include指令来创建复合式页面,可以提高代码的重用性。
JSP中主要的程序就是脚本程序,其中包括三个部分:JSP声明(Declaration)、JSP表达式(Expression)和JSP代码段(Scriptlet)
三种脚本程序基本语法都以“<%”开头、“%>”结尾的
动作标记
1、include动作标记
(1)特点:指明当前JSP页面执行阶段所需包含的其他文件,在执行的时候嵌入所需要的文件
(2)语法格式
- <jsp:include page="文件的URL路径/">
- <jsp:include page= "文件的URL" > param子标记 </jsp:include> param子标记:在包含文件的时候,可以传一些参数进去
题目:include指令和include动作的区别是什么?
(一)语法不同
- 动作标记: <jsp:include page=.../>
- 指令标记: <%@ include file=...%>
(二)处理方式、处理时间不同
- JSP动作标记在JSP页面运行才处理文件,优点是能更加灵活的处理所需的文件,缺点是执行速度要慢一些 //灵活是指可以传参数//速度慢是因为,每次在执行的时候才包含它,肯定要重新编译然后再处理
- JSP指令标记使用嵌入式方式处理文件,在编译阶段就处理所需文件,优点是页面的执行速度快;//只包含文件,不能传参
2、 param动作标记
(1)定义
param动作标记不可以单独使用,但是可以作为include、forward动作标记的子标记来使用,该标记以“名字-值”对的形式,为这些动作标记提供附加信息
(2)标记格式
<jsp:param name ="名字" value="指定给name属性的值"/>
3、forward动作标记
(1)作用
从该标记出现处停止当前JSP页面的继续执行,而转向执行forward动作标记中page属性所指定的JSP页面
(2)forward动作标记的两种格式
- <jsp:forward page= "要转向的页面"/>
- <jsp:forward page="要转向的页面">........param子标记........</jsp:forward>
(3)转发形式,浏览器的地址栏中地址没有变化
JSP内置对象
1、不用声明就可以在JSP页面的脚本(Java程序片和Java表达式)中使用的对象。
2、JSP主要的内置对象(内置对象不能用在JSP的<%! %>中使用,因为内置对象是方法的局部变量,因此不能在类中直接使用内置对象)
- out
- request
- response
- session
- application
- page
3、request、response、session、application四者的区别
(1)四个结构中的数据的共享范围不同:application是一个网页一份;request是同一个请求一份;session是一个用户一份;page是一个用户对应的一个页面一份
(2)Servlet中也可以直接访问request和response,但是不能直接访问session和application,可以间接访问session和application
4、request对象(转发)
public void setAttribute(String key, Object obj)
public String getParameter(String s)//这个是request中私有的
public Object getAttribute(String key)
public void setCharacterEncoding//设置编码格式
5、response对象(重定向)
使用response对象的sendRedirect(url)方法
设置响应的HTTP头;动态响应contentType属性
6、session对象
(1)原理
session对象被分配了一个String类型的ID,服务器将ID发送到客户端,存放在客户的Cookie中。
- 同一用户在同一Web服务目录中的各个页面的session相同。
- 不同用户的session对象互不相同,具有不同的ID。
(2)session 的失效
- 客户关闭浏览器
- session到达了最大生存时间
(3)作用
- 通过服务器将session ID作为一个cookie存储在用户的Web浏览器中来唯一标识每个用户会话,session ID的值是一个不会重复的字符串。
- session对象可用来存储用户的信息,这些信息可以在不同页面被传递
7、application对象
一个Web项目只有一个application对象,它开始于服务器的启动,直到服务器的关闭。在此期间,application对象一直存在于服务器内存中。application对象是所有用户共享的,可以存放公用的全局变量。
与application对象相比,session对象则是每个客户各自专有的,不同用户的session对象之间不可以共享和交互数据。
第一章
1、java的各个版本:javaSE、javaEE、javaME
2、面向过程和面向对象程序设计语言的区别
面向过程的程序设计语言:
基于解决的问题的步骤的视角,将程序划分为单个的功能,程序由函数+数据结构组成,两者独立分离
面向对象的程序设计语言
以人观察世界的视角:世界是由对象构成的,类、对象、对象的关系、对象的通讯和交互
3、编译执行和解释执行语言的区别(java需要编译和解释)
编译执行的语言
通过特定的工具软件将源代码经过目标代码转换成机器代码(可执行程序),然后直接交操作系统执行,程序是作为一个整体来运行的。
解释执行的语言
读入一句执行一句,不需要整体编译链接,与操作系统的相关性相对较小,但运行效率较低,而且需要一定的软件环境来做源代码解释器。
4、什么是java虚拟机?工作原理是什么?jdk和jre的区别?
虚拟机:在真实的机器中用软件模拟实现的一种虚拟机器。
JVM:解释执行.class文件(字节码),把字节码解释成具体平台上的机器指令执行
优点:Java代码可以“一次编写,处处运行”。
JDK是开发工具包,相当于是一个编译器。它是面向开发者的。安装jdk之后,有jre和javac,没有eclipse和javac
JRE是运行环境,相当于jvm虚拟机。jdk开发出来的java程序必须在jvm中运行,jre就提供了这么一个环境。它是面向使用者的,包括Java 虚拟机 (JVM)、Java核心类和支持文件,不包含开发工具 -- 编译器、调试器和其它工具。
5、手工编译和运行
(1)没有配置path路径,最初始的手工编译运行 https://blog.csdn.net/fighting123678/article/details/82779639
(2)配置path路径:我的电脑——右击——属性——高级系统设置——环境变量——系统变量中添加(不是在用户变量中添加就,因为用,户变量设定之后,只能由用户使用,系统变量的话在整个windows中都可以使用)——选中Path——在框中输入javac的路径(注意是到bin文件夹下)——点击确定就可以了
(3)配置JAVA_HOME路径:我的电脑——右击——属性——高级系统设置——环境变量——点击系统变量中的新建——在变量值的时候注意是只要到jdk中就好,不用到bin
然后单击path——将原来E:\Java\jdk-10.0.2\bin改成%JAVA_HOME%\bin
配置JAVA_HOME的好处:
- 将E:\Java\jdk-10.0.2\bin改成%JAVA_HOME%\bin,这俩是等同的,而且后者与前者相比,后者引用JAVA_HOME代表的路径,那天把jdk改了,可能是不同版本1.7/1.8,那么该的时候只改JAVA_HOME变量就好了,别的地方不需要改变
(4)配置classpath环境变量路径(不需要转到class所在的地方就可以解释class文件):
设置classpath环境后,即使java.class不在C盘中,也可以照常运行,因为,配置过CLASSPATH环境后,java命令是按照CLASSPATH变量中的路径来的寻找class文件的
右击我的电脑——属性——高级设置——环境变量——点击系统变量中的新建——变量值是java.class所处的地方
6、java的IDE
– IntelliJ IDEA
– Eclipse
– NetBeans
– JBuilder
Java基础语法
1、占字节问题
byte:1个字节,内存占8位,表数范围:-2的7次方—2的7次方-1
boolean:1个字节,内存占8位,表数范围:-2的7次方—2的7次方-1
char:2个字节,内存占16位,表数范围:-2的15次方—2的15次方-1
short:2个字节,内存占16位,表数范围:-2的15次方—2的15次方-1
int:4个字节,内存占32位,表数范围:-2的31次方—2的31次方-1)
long:8个字节,内存占64位,表数范围:-2的63次方—2的63次方-1
float:4字节,32位,单精度
double:8字节,64位,双精度
byte、short、char互相不转换自动为int
2、变量使用三部曲:声明,赋值,使用
类和对象
1、面向对象语言的基本特点:封装性、继承性、多态性
2、什么是类和对象,什么是封装性
类 :具有相同属性和行为的对象的抽象
对象:属性(静态特征、数据)和行为(动态特征、方法)的封装体。
类和对象的关系:类是对象的类型,对象是类的实例。
生成对象的格式:类名 对象变量名 = new 类名([参数]);
封装性:是把普通的对象进行封装,对象的属性设为私有的,对外提供get和set方法,其他类只能通过get和set对对象属性值进行操作
3、JVM内存分配
heap(堆):存放动态创建的对象(new)
stack(栈):存放局部变量、引用
4、构造函数作用,定义要求。默认构造方法和对类成员的初始化。构造和初始化顺序(4步)
(1)构造函数的特点:不能指定返回值类型;名字必须与类名一样
(2)构造和初始化对象顺序:
1>申请内存空间,为新对象分配空间并初始化,所有基本类型数据设置成了默认值(如,整数类型是0,布尔型为false),而引用类型则被设置成null;
2>执行显示初始化;
3>执行构造方法;
4>将对该对象的引用赋值给引用变量。
5、什么是方法重载?要求是什么?和方法重写有什么区别?
当多个方法具有相同的名字而含有不同的参数时,产生重载。(参数的个数或者参数的类型不同,与返回值是没有关系)
6、this引用的作用
在类的方法定义中,使用this关键字代表使用该方法的对象的引用,其值是当前对象的引用。
7、内存中的存放位置
(1)java中,除了基本类型以外的变量类型都是引用类型,存放在栈区
静态变量和字符串常量放在数据区
8、如何进行垃圾回收
垃圾回收对象之前,调用Object的finalize方法
(1)finalize方法是JAVA里面所有类中都有的功能,功能是,当垃圾回收器要回收这个对象的时候,会自动调用finalize方法。
(2)垃圾回收是依靠一种算法,程序员是无法精确地控制进行控制。
继承
1、什么是继承?带来的好处是什么?
定义:指一个类包含另一个类的属性和行为,使其成为自己的属性和行为
好处:通过继承,子类自动拥有父类的所有普通成员(成员变量和方法)不继承构造父类的构造函数
2、类成员的可访问性。(4个关键字)
3、什么是重写?有哪些语法要求?
重写:子类覆盖父类的同名方法,在子类中对继承来的方法重新编码
重写方法的要求
两同:必须和被重写方法有相同的名称、参数列表;
两小于等于:1)子类方法的返回值类型比父类方法的返回值类型更小(子类)或相等;2)子类方法声明抛出的异常类要比父类方法声明抛出的异常类更小(子类)或相等。
一大于等于:子类方法的访问权限要比父类方法的访问权限更大或相等。即,重写方法不能使用比被重写方法更严格的访问权限。
4、super关键字的作用什么?
作用:使用super引用父类中的成员和方法。
super关键字不能访问父类中private的成员变量和方法
5、能否继承父类的构造函数?子类的构造函数的执行过程。如何显式调用父类构造函数?
不能
子类的构造方法中必须要调用父类的构造方法。
子类通过super(参数列表)调用父类构造方法,调用super的语句必须放在子类构造方法的第一行。
若子类构造方法中没有显式调用父类构造方法,则系统默认调用父类无参数的构造方法;若父类中没有定义无参数的构造方法,编译出错。
6、
(1)强制类型转换的时候,换的是引用的类型
(2)用instanceof判断的是该类所指对象的类型(不是引用类型)与后面对象之间的关系
(3)是否可以使用某一个变量看的是,这个类的引用类型与变量之间的关系。
(4)子类类型的对象可以赋值给父类类型的引用,父类类型的引用不能访问子类新增成员对象和方
7、final关键字
阻止类被继承,阻止方法被重写
多态
1、Java中的多态
- 静态多态性(方法的重载)
- 动态多态性
2、
3、多态存在的条件
- 要有继承
- 要有方法的重写
- 使用父类引用指向子类对象
静态成员具有继承性;静态成员不具有(动态)多态性,子类可以继承父类的静态成员
父类对象不可以调用子类新建的方法或者是对象,但如果子类重写了父类的某个方法,则此时父类引用调用的是子类方法的内容。
抽象类
1、抽象类不能被实例化,但是抽象类中可以有构造函数
2、抽象类是不完整的,所以不能用new,不能新建抽象类对象比如Pet是一个抽象类,那样的话,Pet a=new Pet();
这样是错误的,因为抽象类是不完整的,没法实现创建
接口
1、无构造方法(与类不同),不能直接实例化(与抽象类类似)
2、接口中的成员全是常量成员 public static final,接口中的方法全是抽象方法public abstract,接口中,只允许public,abstract,default,static,public abstract,public static,来作为修饰接口中的方法,其它是不允许的
1、StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)
StringBuffer和StringBuilder都实现了toString的重载,但是没有实现equals方法的重载。
2、hashcode原理
在元素数量大的情况下,大大提高检索的效率。
3、迭代器的作用。如何获得迭代器?如何利用迭代器进行容器遍历?(迭代器并非是容器,它的功能是遍历容器)
容器的遍历:必须根据容器的确切类型进行编码。
例如,对List的编码,要改为Set?
要求:不关心容器的类型,如何才能不重写代码就能应用于不同类型的容器?
迭代器:以统一的方式遍历容器中的对象,程序员不必知道该容器的底层结构。
一种设计模式
4、
5、
6、
7、
若一个方法抛出多个已检查异常,则在方法定义头部列出所有的异常,每个异常用“,”分开。void method1() throws Exception1,Exception2,...
流
1、什么是节点流?什么是处理流?有哪些常见的节点流和处理流?
节点流:可以从一个特定的数据源读取数据。
处理流:连接在已存在的流(节点流或处理流)之上,通过对已有流的处理为程序提供更强大的读写能力。对数据执行某种处理
2、flush将清空缓存,即将缓存的数据写到文件里
3、输入输出重定向的方法。
将标准输入、输出重定向至其他输入输出流
System.setIn(InputStream in)
System.setIn(new FileInputStream(“a.txt”));
System.setOut(OutputStream out)
System.setOut(new FileOutputStream(“b.txt”));