直接转发方式(Forward):客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。
浏览器向Servlet1发出访问请求;
Servlet1调用forward()方法,在服务器端将请求转发给Servlet2;
最终由Servlet2做出响应。
间接转发方式(Redirect):实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。
浏览器向Servlet1发出访问请求;
Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2;
浏览器向servlet2发出请求;
最终由Servlet2做出响应。
举个通俗的例子:
直接转发就相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;
间接转发就相当于:“A找B借钱,B说没有,让A去找C借”。
直接转发和间接转发的原理及区别是什么
Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。
对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。
对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。
static是静态变量,就是变量值不随函数执行结束而消失,下次调用同一函数时,上次所赋予的值仍存在。
static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况;
通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
System.gc()的工作原理
gc()函数的作用只是提醒虚拟机:程序员希望进行一次垃圾回收。但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机有不同的对策
gc()进行回收的准则是什么?也就是说什么样的对象可以被回收?
在下次垃圾回收周期来到时,如果没有任何对象的引用指向该对象时,对象才会被回收
方法的重写Overriding和重载Overloading是Java多态性的不同表现
重写Overriding是父类与子类之间多态性的一种表现
1、如果在子类中定义某方法与其父类有相同的名称和参数,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了;
2、只有实例方法才能被重写,超类中的static和final方法不能被重写。
3、重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常
重载Overloading是一个类中多态性的一种表现
1、如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
2、Overloaded的方法是可以改变返回值的类型。
3、重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet
final
用于声明属性,方法和类,分别表示属性不可变,注意:如果是基本类型说明变
量本身不能改变,如果是引用类型,说明它不能指向其他的对象了。但对象还是可以改变
的。方法不可覆盖,类不可继承。
finally
是异常处理语句结构的一部分,表示无论是否出现异常总是执行。
finalize
是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。使用方法 assert
两个,一个是对象,一个是对象的引用。
Math.round(11.5)==12
Math.round(-11.5)==-11
返回最接近它的整数
short s1 = 1; s1 = s1 + 1; 有错
原因:s1+1运算结果是int型,需要强制转换类型
short s1 = 1; s1 = (short) (s1 + 1);
short s1 = 1; s1 += 1;
没有错,s1==2
sleep
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间(休息),把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复,时间到了会继续运行。调用sleep不会释放对象锁。
wait
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
数组没有length()这个方法,有length的属性。
String有length()这个方法。
IndexOutOfBoundsException 数组越界
NullPointerException 空指针异常
SystemException 系统异常
Error表示系统级的错误和程序不必处理的异常,我们无法处理它。
Exception表示是可以捕捉或者需要程序进行处理的异常。
一个类只能继承一个抽象类,但却可以实现多个接口。抽象类中可以有也可以没有抽象方法。并且可以定义和常规类一样的变量和方法。而接口中所有的方法都是抽象的,所有的变量都是静态不可修改的。
public static void main(String[] args) {
Random rm = new Random();
Set set = new LinkedHashSet<>();
while(set.size()<100) {
int a = rm.nextInt(100)+1;
set.add(a);
}
Iterator itor = set.iterator();
while(itor.hasNext()) {
System.out.println(itor.next());
}
}
public static void main(String[] args) {
String str= "23743298";
int length = str.length();
int sum1 = 0;//奇数
int sum0 = 0;//偶数
for(int i=0;i
准备工作
小球分为三组
a1、a2、a3、a4;
b1、b2、b3、b4;
c1、c2、c3、c4;
第一次使用天平
a1、a2、a3、a4; (左天平)
b1、b2、b3、b4; (右天平)
结果: 两种情况
情况X1 :两边一样重,小球在C组中
情况X2:两边不一样重,则小球在A组或B组
针对情况X1:第二次使用天平
c1 (左天平)
c2(右天平)
结果: 两种情况
情况Y1 :c1和c2一样重,则小球在c3、c4中
情况Y2:c1和c2不一样重,小球在c1、c2中
针对情况Y1:第三次使用天平
从c3、c4 任意选取一个小球,选取一个正常小球
c3(左天平)
a1(右天平)
如果c3和a1一样重,则c4为问题小球;否则为c3
针对情况Y2:第三次使用天平
从c1、c2 任意选取一个小球,选取一个正常小球
c1(左天平)
a1(右天平)
如果c1和a1一样重,则c2为问题小球;否则为c1
针对情况X2:第二次使用天平
若两边不一样重,则小球在A组或B组。将小球重新排号。
假设a组为偏重的组,b组为偏轻的组。
a1、a2、a3、a4; 改为 重1、重2、重3、重4
b1、b2、b3、b4; 改为 轻1、轻2、轻3、轻4
c1、c2、c3、c4 ; 改为 好1、好2、好3、好4
重1、重2、重3 、 轻4 (左天平)
好1、好2、好3 、 重4 (右天平)
结果:三种
A:平衡:说明轻1,轻2,轻3三个当中有一个轻了
B:重1,重2,重3,轻4,这边重了: 说明肯定是重1,重2,重3三个当中有一个重了
C:轻1,轻2,轻3,重4这边重了:说明要么是重4重了,要么是轻4轻了
针对A:
轻1,轻2称
如果平衡,则轻3轻了,如果不平衡,轻的那边那个轻了,是要找的球
针对B:
重1,重2称
如果平衡,则重3重了,如果不平衡,重的那边那个重了,是要找的球
针对C:
重4和轻4有问题
重4与好1称,如果平衡,则轻4有问题,否则重4有问题。
第一步: 5升水桶装满水,全部倒入3升水桶,则5升水桶还剩下2升水;
第二步:将5升水桶重剩下的2升水全部倒入3升水桶重,则3升水桶重有2升水;
第三步:将5升水桶装满水,向3升水桶装水直到装满;那么5升水桶还剩下4升水;
22、