8.15
一.关于servlet service
1.不管是post还是get方法提交过来的连接,都会在service中操作,.service判断请求类型,决定是调用doGet()还是doPost()方法
2,service是在javax.servlet.Servlet接口中定义的
3doget dopost与HTTP协议有关,是在java.servlet.HttpServlet中实现的
4.GenericServlet抽象类给出设计servlet的一些骨架,定义了servlet的生命周期,还有一些得到名字,配置,初始化参数的方法,其设计的是和应用层协议无关的
5.service方法是在service生命周期中的服务期,根据HTTP请求方法(GET.POST等)将请求发送到doGet,doPost
默认在HttpServlet类中
6.所有的请求都由service方法处理,
javax.servlet.GenericServlet接口实现了 javax.servlet.Servlet接口,
并且javax.servlet.http.HttpServlet是javax.servlet.GenericServlet的子类
二.关于sql语句
statement每次执行sql语句,数据库都要执行sql语句的编译
statment 对象用于将sql语句发送到数据库中
实际上有三种statment对象,他们都作为在给定连接上执行sql语句的包容器:
.statment .PreparedStatment(它从statment中继承而来) .CallableStatment(它从PreparedStatment中继承而来)
他们都专用于发送特定类型的SQL语句
(1) .statment对象用于执行不带参数的简单SQL 语句,提供了执行语句和获取结果的基本方法
(2).PreparedStatment 对象用于执行带或不带参数的预编译SQL语句,添加了处理IN参数的方法
(3).CallableStatment对象用于执行对数据库已存储过程的调用,添加了处理OUT参数的方法
三.关于线程
1.定义线程
(1)扩展java.lang.Thread类
//方式1 继承
public class test1 {
public static void main(String[]args) {
MyThread m=new MyThread();
MyThread m2=new MyThread();
//m.run()
//不要直接调用run方法,否则run方法会立即被执行,而在run方法返回之前其他线程
//无法并发执行,也就是,系统吧线程对象当成普通对象.run方法当成普通方法,而不是线程执行体
//程序执行的结果只有一个主程序
//调用了run方法后,该线程已经不再处于新建状态,因此不能再调用start()
m.start();
//调用start方法来启动线程,系统会把run方法当成线程执行体来处理
m2.start();
}
}
//如果电脑只有一个cup则任何时刻只有一个线程被执行
//不能对同一个线程对象多次调用start
(2)实现java.lang.Runnable接口
package a_ThreadDemo;
//加入睡眠
public class MyRunnable implements Runnable {
@Override
public void run() {
for(int i=0;i<67;i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+i);
}
//用Tread类来获取当前线程对象比较简单,直接用this就可以
//用Runnable接口就需要使用Tread.currentThread()
//继承方式,直接创建Thread子类对象
//实现Runnable接口创建的对象只能作为线程对象的target
}
}
//方式2 实现接口
public class test2 {
public static void main(String[]args) {
MyRunnable m=new MyRunnable();
Thread t1=new Thread(m,"thread1");
Thread t2=new Thread(m,"thread2");
t1.start();
t2.start();
}
}
2.实例化线程
(1)如果是展了java.lang.Thread类的线程,则直接new完即可
(2)如果是实现了java.lang.Runnable 接口,则用Tread的构造方法
Thread(Runnable target)
Thread(Runnable target,String name)
3.启动线程
在Thread对象上调用start()方法,而不是run()或是其他方法
线程可以驱动程序,这可以由Runnable 接口提供,把你想要任务执行的命令写到run()方法中,
当从Runnable 中导出一个类,他必须具有run()方法,但是这个方法不会产生任何内在的线程能力,
要实现线程行为,就要将任务显示附着到线程上
传统方式是将对象交给一个Thread构造器
调用Thread对象的start()方法是将该线程执行所必须的初始化操作
然后调用Runnable 的run()方法.以便在这个新线程中启动该任务
8.17
1.关于访问控制级别
which keyword can protect a class in a package from accessibility by the classes outside the package but not package inside?
default
defualt同类,同包下可以访问,子类不可以
protected 它的子类是可以访问的,如果它的子类和它不在一个包下,仍可以访问
2.servletconfig接口默认哪里实现的?
8.19
1.java语言中,按照一定格式生成程序的文档是 javadoc
jar 将许多文件组合成一个jar文件
javac 编译
Javadoc 它从程序源代码中抽取类,方法,成员等注释成一个和源代码配套的API帮助文档
javah把java代码声明的JNI方法转换为c/c++头文件
2. int i=0;
i=i++;
System.out.println(i);
输出结果应为0,这里的i=i++相当于i++
System.out.println(i++);
先输出结果再自增
3.一个以.java为后缀名的源文件,只能有一个与文件名相同的类,可以包含其他类
4.
public class hello {
public static void add(Byte b){
b=b++;
}
public static void main(String[]args){
Byte a=127;
Byte b=127;
add(++a);
System.out.println(a);
add(b);
System.out.println(b);
}
}
a=-128 b=127
++a超出范围,变为-128,Byte类型范围-128-127
进行运算时,自动拆箱,成byte类型,所以add函数不能实现自增功能