零基础手把手教你学java--学习指导文档

时间:2024.3.31

想学java的朋友,看下这个零基础手把手教你学java

具体地址:52java.taobao.com(记得收藏本店,或许有一天会有需要)

不管你是新手,还是有一定基础的人,这里绝对有你想要的东西,

下面是本视频各部分的介绍,你要是真想学的话,就请你认真的看!

视频教程分为如下部分:

注:目前的就业市场数据表明,企业对RIA人才的需求量急剧攀升,而Flex则是RIA市场当之无愧的王者,基于以上几点考虑,为了满足广大学员对RIA知识的迫切需求,开设了这部分内容,学习完毕后,学员完全可以从事Flex相关方面的开发工作。
Flex是一种客户端表示技术,其与服务器端的交互可以通过Http Service、Web Servcie及Remote Object等技术与规范实现,因此通过Flex的学习,学员可以进一步巩固之前学习过的内容,体会Flex与Java交互的多种方式。

问题:ExtJS与Flex应该学习哪一种?
回答:如果必须要从两者中选择一个,我强烈建议选择Flex,这是由企业开发的特点决定的,Flex具有更好的前景,更有财力的大公司(Adobe)的支援,而且使用Flex开发的应用无需考虑平台兼容性(均运行在Flash Player虚拟机中),目前市场上对Flex开发人员的需求量也是最大的。我建议建议大家学习强势技术,因为每个人的时间与精力都是有限的,将宝贵的时间花在回报最大的技术上,同时我也提供了ExtJs的教程。学员完全可以根据自己的爱好来学。

注:学员将课程学习完毕后,看我收集的面试题集合、面试题目帮助学员巩固所学成果,学员将这些题目的原理烂熟于心后将会觉得随后遇到的各大公司笔试、面试题目都有似曾相识的感觉,那时就不再是你找工作了,而是公司强烈挽留你了,加油!


第二篇:Java零基础学习


Windows 的"文件系统"(就是磁盘管理的逻辑结构) C:\

|-- Windows <当前工作目录>

| |-- System32

|-- Programs Files

|-- Java

D:\

|-- Demo

E:\

Linux 的文件系统

/

|-- home

| |-- soft01 <当前工作目录> ls | |-- soft02

| |-- ....

|-- etc

|-- opt

|-- usr

|-- mnt

挂载点

目录 == 是等同概念

Windows :

地址栏显示的目录: 窗口中显示的是: .

Linux 当前工作目录:

使用pwd 就可以显示当前的工作目录

cd 改变当前工作目录 .. 上层目录

cd ..

ls 显示目录(文件夹)的内容, 默认显示"当前工作目录"内容 ls -l 按照长(long/详细) 格式显示目录内容

pwd + ls + cd == 资源管理器

资源管理器: 管理(增删改查)文件系统

增: 创建文件夹/创建文件

mkdir: 创建文件夹, 默认: 在当前工作文件夹中创建子文件夹 如: mkdir abc 就在当前文件夹中创建子文件夹abc

但是: 如果文件已经存在, 会出错误, 没有写授权出错误 touch: 创建文件, 默认: 在当前工作文件夹中创建文件

touch: 如果是已经存在的文件/文件夹, 修改"最后编辑时间" 如: touch test.txt 创建文件

touch test.txt 修改时间

Linux 用户 在 "用户主目录" 中有全部的管理权限!

用户主目录: User Home(用户的家)

改: 该文件/文件夹的名字

mv 移动(move)/改名

mv [存在的文件/文件夹] [不存在的文件] mv [存在的文件/文件夹] 存在的文件夹 将前面的文件夹/文件 移动到 后面的文件夹里面

在执行mv命令之前, 要执行ls ,

rm 删除(remove) 文件/文件夹

rm 文件1 文件

rm -rf 文件1

-rf 选项 r f

绝对目录/

绝对目录(): ((.)

如下 都想 , 是当前目录下的操作

如 touch mv abc def

rm -rf abc

如下是绝对目录(路径)

如: cd /

将demo 移动到当前目录中 ls /

常见目录

.. 上层(父目录)

. 当前目录

~ Home 用户主目录

cd ~ 回家 cd ~ == cd

苹果电脑 == Mac 电脑

操作系统: Mac OSX , 是Unix 系统

IOS 就是 移动版的 OSX

Java 程序的开发

1) 使用Eclipse开发Java应用程序

Eclipse(日食/月食) 是一个流行的开发工具软件, 是开源软件 cd /opt/eclipse

ls (可以看到eclipse程序, 绿色)

./eclipse 执行 当前目录中的 eclipse程序

启动Eclipse以后要选择 工作空间(workspace)

工作空间: 是Eclipse 默认保存文件的位置.

/home/soft01/workspace

Java 源程序(.java)经过编译, 编译为java字节码(.class), 在通过JVM(Java虚拟机)

计算机只能处理数据+指令

程序 = 数据 + 算法(处理数据的指令)

Java 的API: 是JDK带来的程序模块(.class 可以在应用程序中直接调用,

/opt/jdk/jre/lib/rt.jarJDKAPI(.class文件) 在压缩包中, 包含按照功能进行分类

有文件 java.util

Linux 操作系统:

Android

命令

cp 复制文件/文件夹

复制文件:

cp 存在的源文件 不存在的目标文件 将复制为新文件

cp 存在的源文件 存在目标文件 将目标文件进行覆盖 cp 存在的源文件 存在的目标文件夹 将文件复制到文件夹中

一般在复制之前ls检查目标文件是否存在!

复制文件夹(使用 -r 选项, 递归复制子文件夹)

cp -r 存在的源文件夹 不存在的目标文件夹 改名复制文件夹 cp -r 存在的源文件夹 存在的目标文件夹 将文件夹复制到

目标文件夹内部

如果源文件夹不存在, 会有错误!

unzip zip文件名 释放(解包)zip文件

gedit HelloWorld.java 看(文本文件 .java .txt)文件内容

Eclipse 安装

1) 去网站下载 JDK 和 Eclipse(经典版/Java开发版)

2) 要先安装JDK 然后再安装Eclipse

3) 注意版本的组合(32位=X86 64位=x64)

32位操作系统 + 32位的JDK + 32位Eclipse

64位操作系统 + 32位的JDK + 32位 64位操作系统 + 64位的JDK + 64位

4) JDK 的安装 (下一步 * n)

5) Eclipse 安装: 是绿色软件, 释放ZIP

MAC OSX

1) 执行Java命令, 自动安装JDK

2) 下载Eclispe 的位版本

关于JDK

是Java!

是常用JavaAPI的源文件(java.util.Scanner.java)

运行环境执行.class java程序

(JDK(工具 开发Java程序要安装 运行Java程序要安装或 JDK

作业: 1) 使用命令浏览 JDK文件夹

2) 将API源文件(src.zip)复制到 Home 中,

释放并且找到Scanner.java

变量

1) Java 是强类型的语言, 对变量的语法有严格的要求

2) Java变量有明确的类型, 并且不能更换

3) 变量必须先声明, 并且初始化以后才能读取使用!

4) 变量有明确的作用域, 离开作用域以后就销毁.

5) 在同一个作用域中, 变量不能重复声明

6) 变量的值可以更改

如果违反以上规定, 会出现编译错误!

声明 == 定义, 从当前代码位置开始以后就存在变量了

int age; //声明一个变量age 是在内存中开辟了一个数据空间 age = 16;//变量的初始化, 就是第一次赋值

System.out.println(age); //读取age的值, 在控制台输出

凡是遇到编译错, 一定仔细阅读编译错误! 根据编译错,

思考原因!

Java 变量类型, 分类两大类: 基本类型 和 引用类型

基本类型有8种, 除了基本类型 其他的类型都是引用类型

如:

Scanner console;//定义了引用类型 变量

基本类型有8种:

整数: byte short int long

浮点数: float double

布尔类型: boolean

字符类型: char

计算机只能处理数据Java.

1) 8(补码位有符号数(补码) -32678 ~ 32767

int 32() -21亿(约) ~ 21亿

的)~2的31次幂-1 long 64(补码

Java, 在超范围计算时候会发生溢出 溢出计算可能是有害的(了解极值)加以避免

long !

2)浮点数: 就是小数类型 请参考 IEEE 754标准

float 32位浮点数 不够精确

double 64位浮点数 精确度(有效2进制数字长度)大约是 float的两倍, 双倍精度的浮点数

2.1) 为了追求计算准确性,常用double类型数据,很少使用float

2.2) 默认的浮点数字面量是double类型,如: 5.5

2.3) 字面量的后缀: L/l D/d F/f

字面量: 直接给出的常数, 也称为"直接量",如: 5 3.5 5D

2.4) 浮点数计算不保证绝对准确性!

pi = 3.1415926535897932384626433832795028

X = 314.159265358979

3)布尔类型: 用来表示是否成立的状态: true(真) false(假) boolean

boolean pause = false; //pause 暂停 是假 //以上表示没有暂停

boolean gameOver = true;

boolean used = true; //used用过/二手

boolean isMan = true;//纯爷们

if(used){

System.out.println("古董级别精品!");

}else{

System.out.println("精品推荐!");

}

if(a){

}else{

}

if(b){

}else{

}

4)字符类型!

unicode.org

. 字符变成了数数字, 是一个16

中 英文标准 同包含20000+中文字符.

4.6) : '中 4.7) ,

'\\' \

'\'' '

'\"' "

'\b' backspace

'\uxxxx' 4位16进制的unicode 编码 '\u4e2d' '中'

4.8) 字符是整数, 所有字符可以参与数学运算!

如: char c = 30000; //c '田'

数据类型转换

1) 自动类型转换(小类型到大类型)

2) 强制类型转换(大类型到小类型)

可能会发生 精度损失 和 超范围溢出问题

char c = 'A'+1;//66

char ch = 'A';

c = ch + 1;//编译错误!

c = (char)(ch + 1);

1) Java编译器, 在编译期间会将所有字面量(常量)的运算 优化为结果, 如: 'A'+1 优化为整数 66

变量的值只能在运行期间确定, !

简单说: 字面量的运算相当于一个"字面量"

2) int字面量在不超过char(byte/short) 可以直接给char(byte/short)

运算符 (+ - .) (char)

数学运算 + - * /

1) , .

2)

int类型计算

4) , Java,

5) , !

++ --

比较运算

65 <= c <=90

char c = 'D';//68

68>=65 && 68<=90

true && true

true

c>='A' && c<='Z'

逻辑运算 (&&(与)并且 ||(或)或者 !(非)否则 )

短路逻辑运算: && ||

非短路逻辑运算: & |

短路与运算:

如果 (表达式1) && (表达式2) 一旦 表达式1的值是false 那么不计算(表达式2)整个表达式 返回 false

短路的或运算:

如果 (表达式1)||(表达式2) 一旦 表达式1的值是true 那么不计算(表达式2) 整体返回true

因为短路逻辑规则更接近业务规则, 实际业务中很常用!

条件运算 也 称为3元运算符

语法: 布尔表达式1 ? 表达式2 : 表达式3

如果 布尔表达式1 返回true 则使用 表达式2 作为整体结果 否则 使用 表达式3 作为整体结果

int a = 300;

int b = a>200 ? 2 : 3;

则: b = 2

业务规则: 根据查询结果数量和页面大小,

前提数据: 查询结果数量 rows = 33, 每页大小 预期的结果 pages = 4

赋值运算 =

赋值运算表达式,

int a = 4;

a = 5;

复合赋值运算 int i=1;

i+=2;// 相当于 i*=3;// i = i*3;

字符串连接运算 +

"+" 是Java中唯一"重载"的运算

"重载": 名字相同功能不同的运算

运算符是"+" 但是功能是不同的运算!

1) 如果+两端是数值, 就是数学加法

2) 如果+有一端是字符串, 则是字符串连接!

int a = 5;

int b = 6;

int c = 5+6;//数学加法

String s = "5"+5;//字符串连接

System.out.println("123"+"ABC");//"123ABC" System.out.println(123+"ABC");//"123ABC"

System.out.println(1+2+3+"ABC");//"6ABC"

System.out.println("1"+2+3+"ABC");//"123ABC" System.out.println('1'+2+3+"ABC");//"54ABC" System.out.println('1'+'2'+'3'+"ABC");//"150ABC" System.out.println("1"+"2"+"3"+"ABC");//"123ABC"

char c = 'A'+1;

System.out.println(c);//'B'

System.out.println('A'+1);//66

switch(整数表达式){

case 整数字面量/常量1:

//语句块1

case 整数字面量/常量2:

//语句块2 break;

default:

//

}

switch: 开关

case:

case 变量

业务: : 良好 中等 及格 不及格

String level;

case 10:

"; break;

"; break;

case 7: level = "中等"; break;

case 6: level = "及格"; break;

default: level = "不及格"; break;

}

if 多路分支 与 switch

switch case 只能根据整数结果进行分支! 性能好 if else 多路分支 可以使用任意条件(包括整数条件)

Java 有3中循环结构

for while do while

1) for 循环结构: "经典"用法是处理 与个数/次数有关循环 语法:

for(初始化表达式(1);循环条件(2);递增表达式(4)){

//循环体 (3)

}

(5)

流程:

(1)->[(2)-true->(3)->(4)]->[(2)-true->(3)-(4)]->

(2)-false->(5 结束)

业务: 计算10以内的奇数和 sum = 1 + 3 + 5 + 7 + 9 int sum = 0;/*0*/

int i;

for(i=1/*1*/; i<10/*2*/; i+=2/*4*/){

//i = 1 3 5 7 9

sum += i;/*3*/

}

System.out.println(sum);/*5*/

System.out.println(i);//11

执行流程:

(0 sum=0)->(1 i=1)

质数(): 1 就是~

: , 这个数是质数!

9 的约数 3

10 的约数 2 5

12 的约数 2 3 4 6

13 的约数 14 的约数 2 7

15 的约数 3 5

24 的约数 2 3 4 6 8 12

50 的约数 2 5 10 25

60 的约数 2 3 4 5 6 10 12 15 20 30

77 的约数

1) 检查一个数是否是质数

设一个数 num

检查 n = 2~num/2

如果 num 能够被 n整数, 则n是num的约数, 所以num不是质数 否则, 没有找到任何约数, 则num是质数

boolean isPrime = true;//是质数=true

num = 13;

for(int n=2; n<=num/2; n++){

if(num%n==0){//找到约数 n

isPrime = false;//不是质数

break;

}

}

if(isPrime){

System.out.println(num+"是质数!")

}

2) 输出 100以内的所有质数

while 循环: "经典" , 时候检查循环条件.

语法:

while(循环条件(1)){

//循环体(2)

}

执行流程:

结束

业务: 将一个整数

num = 45917

业务分析:

last = num%10;//9

sum = sum * 10 + last;//sum=719

num /= 10;// num=45

last = num%10;//5

sum = sum * 10 + last;//sum=7195

num /= 10;// num=4

last = num%10;//4

sum = sum * 10 + last;//sum=71954

num /= 10;// num=0 循环结束了!

int num = 45912;

int sum = 0;

while(num!=0){

last = num%10;

sum = sum * 10 + last;

num /= 10;

}

System.out.println(sum);

do while 循环: 经典用法,用于与与次数无关的循环, 在循环体以后检查循环条件.

语法:

do{

//循环体(1) }while(循环条件(2));

执行流程:

结束

业务: 百分制输入检查.

业务分析:

1) 从控制台获得分数

2) 如果分数不是合格分数返回 分数不是合格分数: 0 或者 大于100

int score;

do{

字符与字符串

字符: 是单个字符,

字符串: 是一串(一排)"字符数组", 不是一个字符

Java是强类型语言! (兼容)不能比较!

"" 定义的字符串字面量!

'' 定义的是字符字面量!

"女" == '女' //编译错误!

字符串比较相当, 必须使用 equals() 方法(在String API 讲) "女".equals('女') //返回false, 类型不一致

"女".charAt(0) == '女' 等到 true

"女".equals('女'+"") 等到 true

Java API 是人写的, 是给你人用的,尽量按照人的习惯输出! 'A'+"B" 得到 "AB" (按照人的习惯, char按照字符处理)

(int)'A'+"B" 得到 "65B"(按照人的习惯, int按照10进制处理)

01000001 -> "65" (由API 方法: Integer.toString()实现)

for while do...while

经典用法

for: 个数次数有关的循环

while: 不限次数的循环, 循环条件在循环体开始位置检查. do...while: 不限次数的循环, 循环条件在循环体以后检查.

循环的相互替代

for可以替代 while

for(;循环条件;){

//循环体

}

等价

while(循环条件){

//循环体

}

死循环

while(true){

//循环体

}

等价

for(;;){

// }

// }

使用while for(初始化表达式; //循环体

}

等价

//初始化表达式;

while(循环条件){

//循环体

//递增表达式

}

do while 与 while的替换

do{

//循环体

}while(循环条件);

等价于

while(true){

//循环体

if(! 循环条件){

break;

}

}

for(;;){

//循环体

if(! 循环条件){

break;

}

}

循环的使用原则:

1) 如果是与次数(个数)有关 使用 for

2) 业务循环过程中循环条件在循环开始位置检查, 使用while

3) 业务循环过程中循环条件在循环结束位置检查, 使用do while

4) 业务循环过程中循环条件在循环中部位置检查!

使用死循环 配合 break语句 处理循环!

while(true){

//循环体

if(循环结束条件){

break;

}

//循环体

}

5) 如果不能确定使用哪种循环, 就使用+break"!

Java 数组是"对象"

什么是"对象" , 唯物主义

Object == == == "对象" == ""

Java "对象! .

1) 数组变量,

如何声明变量,

语法:

数据类型[] 变量名; 如:

int[] ary; //声明了数组类型"的变量ary.

int a; //声明了int a.

//注意: int类型与int数组类型是不同的类型

数组变量是引用类型的变量! 值是地址值, 是数组的内存位置 数组变量可以赋值为 null(空), 表示不引用任何数组. 就象: "旺财" 没有引用任何的 狗东西!

当变量是null的时候, 如果访问属性/方法/元素时候,会发生 运行异常: 空指针异常! 不是编译错误.

数组变量可以引用数组对象

null 是一个字面量, 表示没有!

当一个引用变量的值是null的时候, 表示有变量, 变量不引用

任何对象(东西), 变量的值是"空", 变量有值,这个值是null.

引用变量的值是对象的地址! 通过地址间接引用了对象(东西) 引用变量的值是null, 时候表示不引用任何对象, 就是: 有变量没有对象!

记住: null 的意思就是 没有!

2) 数组对象(数组)

如何创建数组(创建对象), 就是创建一组数据.

有3种方式:

A. new 数据类型[]{元素0, 元素1, 元素2 ...}

直接初始化元素的方式. 在[]中不能指定长度.

如: new int[]{4,5,6}

B. 使用长度创建数组: new 数据类型[长度 创建数组, 并自动初始化每个元素为"零".

如: new int[3]; 等同于 new char[3] 等同于 new char[]{0,0,0}

new String[3] 等同于

辨析: 0 '\u0000'(

C.称为静态初始化, A方式的简写,只能用于 数组变量,同时初始化 如等价于

创建数组,(数组的引用)!

3) )

A 使用[(序号)]读取,

如将ary引用的数组中,下标为3的元素改写为6 将ary,下标是3的元素的值 //读取, 赋值给 但是: 如果ary!

3, 会出现下标越界异常!

B 使用.length (元素个数)

如 注意: 1 数组的长度是不可改变的! length 是只读的属性

2 如果没有数组(ary = null),访问长度属性会发生空指针异常 3 数组中最后元素位置: length-1 不是 length!

int ary[]; 等价于 int[] ary;

但是 int ary[] 不常见(不建议使用)

方法(Method)

1 在业务功能方面: 方法是软件的功能, 是软业务中的动词 如: 飞机可以被子弹打掉! 检查飞机是否被击中就是方法! 2 方法在代码层面, 就是利用数据进行计算的算法.

如: 检查飞机是否被击中就是一个算法: 判断一个点是否在 矩形范围内(初中学过!)

方法的语法: 3个要素: 返回值类型, 方法名, 参数列表

* 修饰词(以后在面向对象阶段讲)

public static 返回值类型 方法名(参数列表){

//方法体,是方法的算法过程

}

如:

public static boolean hit(

int x, int y, int w, int h, int x1, int y1){ //方法体, 是方法算法

}

方法的业务目的: 检查飞机是否被子弹打中.

返回值类型: boolean

返回结果是true表示飞机被击中,false

方法名: hit 是一个Java标识符() 情况下要"见名知意",如: hit 撞,

参数列表: 是算法的前提条件,

如 int x1, int y1

,

方法体: ,

这个过程称为:

注意:

1.面向对象

对象(Object): 是客观存在的事物, 就是一件东西

对象是软件中的物体(东西)

对象是数据, 是结构化数据(计算机只能处理数据)

如: (row:2,col:3) (2,4) (2,5) (3,5) 就可以表示4个格子对象

类, 类型: 同种类型对象的抽象结构定义.

1) 对象的类型

2) 类是对象的数据结构定义, 用来定义对象的结构的 如:

class Cell{//格子

int row;//行

int col;//Column 列

}

3) Java 中利用类作为模板创建对象

如: new Cell();

2.引用变量:

1) 用类定义的变量是引用变量

如: Cell c1;

2) 引用变量的值是 对象的首地址值, 引用了一个对象. 对象可以被多个引用指向 如: Cell c2 = new Cell(); //c2对象`

3) 引用变量的值, 不是对象本身!

4)

3.属性:

4.功能)

如:

, 是对对象数据进行计算的方法 如: :row加1

方法的"重载"现象: ( 重载方法的调用规则: 参数类型识别方法 如:

class Cell{

int row;

int col;

/** 下落一步 */

public void drop(){ row++; }

/** 下落n步 */

public void drop(int step){ row+=step; } }

调用方法

c1.drop(); //调用无参数方法 drop()

c1.drop(5); //调用有参数方法 drop(int)

c1.drop(5.0);//编译错误, 没有方法 drop(double)

Java 在同一个包中不能定义同名的类

如: 已经定义了类day01.Cell day01.Demo02 都在day01 包中 不能再day01中定义 Cell. 可以定义day01.pm.Cell

5.方法中的this(这个)变量

1) this 是引用变量, 引用调用方法这个对象的自身

2) this 是局部变量,是方法的隐含参数, 调用方法时候 当前对象的引用,隐含传递给this变量

3) 在方法结束时候this变量被回收掉!

注意: this是在方法运行期有效,

当在方法中没有不能区别局部变量和实例时候this

6.构造器: 用于创建对象,

构造器的常见用途就是 )

构造器可以有参数, ,

如将对象属性row, col 2,3

1) ,必须与类名相同()

2) 不能定义返回值类型

3) 4) 使用new运算调用构造器, 创建对象

构造器 == 构造方法 != 方法

构造器

1) 构造器是用来"创建"!

2) 名称必须与类名一致,

3) 使用new 运算符调用

方法

1) 是对象的"功能", 是动作

2) 方法名一般与构造器不同, 一定定义返回值,没有返回值 使用void定义.

3) 使用对象的引用调用对象的方法.

构造器可以重载(方法名一样, 参数不同)

默认构造器

1) 类一定有构造器

2) 如果类中没有声明任何构造器, Java的编译器会添加默认 无参数构造器.

3) 如果类中定义了构造器, Java编译器就不再添加默认构造器

关于俄罗斯方块 (Tetris 俄罗斯方块 是专有词) 下落的方块: Tetromino 4格方块 专有词

下落是方块 有7种类型

000 T

00 L

00 J

S

Z

I

O

1) 方法的重载

方法名相同(参数不同) 的"不同方法"!

drop()

drop(int step)

println是一系列重载的方法,是不同的方法!

println(int) 将整数按照整数的10进制形式进行输出 println(char) 将字符数据按照"字符"输出

println(String) 按照字符串输出

println(char[]) 将char数组, 按照字符串输出!

println(Object) 将参数对象的 toString() 方法结果输出 如: println(t) 实际相当于 println(t.toString()) f(g(x))

2) 重写 了 toString() 可以方便输出对象信息, 便于软件的调试 一般建议所有的类都重写 toString() 方法!

如下情况下, 都会默认(自动)调用 对象的 toString()方法! println(obj) 相当于 println(obj.toString())

obj + ","+obj 相当于 obj.toString()+","+obj.toString()

3) , :

T t = new T();

class T{

Cell[] cells;

public T(){

}

}

}

}

4) 继承, 可以共享代码!

A 继承表示了父子概念的关系

如: 金毛是狗的一种, 狗有很多品种:金毛,哈士奇 父概念: 父类型 超类型 (Super Class)

子概念: 子类型 (Sub Class)

B 软件中的继承现象

如: 4格方块有7种: I T S ...

父概念: 4格方块 子类型: I T ...

飞行物 有两种: 飞机 炸弹

父概念: 飞行物 子类型: 飞机 炸弹

僵尸 有很多种 ....

植物 有很多种 ...

C 子类型可以继承(共享) 父类型的 属性和方法

如:

D 父类型可以定义变量, 引用子类型实例

如: 4格方块 变量, 引用 T(S J ...)型方块实例

多态现象: 4格方块是多种多样的!

如: 正在下落的方块"变量" 一定要定义成 4格方块

正在下落的方块是多态的! 是多种多样的

继承案例: 4格方块有7种: I T S ...

5) 构造器不能继承, 违反这个规则就有编译错误 A 类一定有构造器

B 子类的的构造器中(自动)在第一行调用父类 无参数构造器 C , 就必须使用super()

D super()

6) 重写":子类中"修改"父类型的方法, 子类修改父类功能

飞行的物体方形

|-- Bomb(shootBy())

重写方法的调用规则: 在运行期间调用对象类型的方法

案例: 飞行物体 的 碰撞检测

1) 飞行物体都可以检查是否被击中

2) 具体的飞行物体类型(飞机/炸弹), 来重写具体的

击中检查方法

3) 调用击中检查方法, 由具体的飞行物体类型决定

调用具体类型的方法.

7) 访问控制(访问修饰词), 体现了:封装现象 private 私有, 仅仅在类内部可见

public 公有, 任何位置都可见

位置: 类内部, 同一个包(package)中, 子类, 和其他地方

protected 保护的, 在同一个包中, 和子类可见

包:day02

|-- Xoo

| |-- protected int c; 保护属性 |-- Demo06

|-- main方法中可以读取 Xoo 的属性 包:day02.sub

|-- Yoo

|-- 属性

默认的修饰词(什么也不写) 在同一个包中

class Cell{

int row;//

}

1) A 检查类加载, (.class) 加载到方法区(按需/如果有父类, 就加载全部 的父类型.

B , 全部分配父类/子类的属性空间 并且初始化为默认的"零"

C 调用构造器, 递归调用父子构造器.

在调用构造器时候, 先初始化属性, 在执行构造器代码.

2) 属性访问

A java 是根据变量的类型访问对应的属性的.

引用变量类型是父类型, 可以访问父类型的属性

引用变量类型是子类型, 可以访问子类型的属性或者继承的属性

另外: 重写方法的访问规则: 访问当前对象类型的方法.

注意: 不建议在子类中定义与父类中同名的属性!

java 中"方法签名" = 方法名 + 参数列表

"方法签名" 是区别方法的识别名字

3) "重写" "重载" 区别

"重载": 在类中定义的 方法名一样 参数不同 的不同方法 方法名一样, "方法签名不同"的方法

重载 的方法, 是不同的方法

调用规则: 根据方法名和参数类型识别不同方法的

println(65) 找到 println(int) 执行 "65"

println((char)65) 找到 println(char) 执行 A

println((int)'5') 找到 println(int) 执行

"重写" 子类修改父类的方法

必须是在子类中, 提供与父类""方法!

子类把父类的方法重写了.

调用规则: 根据运行期间, 对象的类型,

4) static 静态的修饰词

static 修饰类的成员(的, static .

A 静态属性, , "一份" () , .

如: 使用静态变量

, B , 是属于类的方法, 不用创建对象, 直接使用 类名调用. (this) 不能直接访问

案例: (p1 p2)的距离

(this)到另外一点的距离

静态方法常用于 工具方法 工厂方法

如: 工具方法 工厂方法: randomOne()

C 静态代码块

5) final 最终的

A final 的类: 不能被子类再继承了.

final 的类可以避免子类利用继承加以修改.

如: String Integer Double ...

println(65) -> "65"

工作中一般不建议使用final的类, 会影响常用框架的使用

final class Koo{}

class Goo extends Koo{}//编译错误

class MyString extends String{}//编译错误

B final 的方法: 不能被子类重写(修改)!

C final 的变量: 只能初始化, 不能再修改!

D static final 是常量, 在类中定义

常量 与 字面量的区别!

字面量:

3.14159

"ABC" 5

常量: 使用 static final 定义 并且直接初始化的是常量 如下代码中PI称为"常量", 3.14159称为" public final static int ROWS = 20;

public final static int COLS = 10;

在广义上说法: "常量" "字面量"

6) abstract

abstract class ,

如和植物 僵尸)

A

B

C ,

抽象方法没有方法体{}的方法

D , E , . F 抽象类的子类型实例, 一定是多态的

1.接口 interface: 是一种特殊的抽象类

1) 接口中只能声明 常量 和 抽象方法

2) 一个具体类可以实现(implements) 多个接口, 是多继承关系.

3) 接口之间可以继承

4) 其他语法现象 与 抽象类相同

关于继承

1) Java是单继承(extends)语言 一个类只能有一个父类

2) Java利用接口实现了多继承现象

一个类可以实现(implements)多个接口

2.内部类 定义在类内部的类

内部类有4种

1) 成员内部类: 定义在类内部

2) 静态内部类: 定义在类内部 使用 static关键字

3) 局部内部类: 定义在方法中

4) 匿名内部类 简称 匿名类: 定义在方法中,没有类名!

内部类的最常用目的是封装类的定义, 减少类的可见范围

abstract class Person{

public abstract void whoismama();

}

class Mama extends Person{

String name = "夏娃";

public void whoismama(){

System.out.println("亚当");

}

//new, }

() }

}

}

1) new 如为 new Baby() 静态方法中因为没有 this.new 有 相应的编译错误出现.

简单说: 成员内部类实例!

2) 静态内部类: 可以在静态方法中创建实例, 可以访问外部 类的静态属性和方法(不能直接访问外部类的动态属性和方法)

3) 局部内部类: 作用域在方法内部!

局部内部类只能访问方法中final局部变量

4) 匿名类: 是继承一个父类并且同时实例化为对象的语法现象 因为匿名内部类语法"极其简洁", 经常用在简洁实现接口/抽象 类实例.

字符串重写了equals方法

当两个字符串对象内容一致时,返回true

字符串还支持一个equals方法,该方法不是 从Object继承下来的,是String自身独有的

正则表达式

正则表达式就是用一些特殊的字符来描述一个 字符串的格式。

正则表达式的作用:验证一个字符串是否满足 格式要求(匹配字符串)

语法:

[]:用于描述一个字符

[1234]:表示该字符是1或2或3或4

[abc]:表示a或b或c

[^123]:表示该字符不能是2或3

[a-z]:

[0-9]:

[a-zA-Z0-9_]:

转移字符

\d : 等效 [0-9]

\D 等效\s :

\S :

\w : [0-9a-zA-Z_]

\W:

量词:

? : 表示前面的内容出现

\w? : 出现0-1个单词字符

* : 表示前面的内容出现0-任意次

\d* : 出现任意次数字

+ : 表示前面的内容出现1-任意次

\s+ : 至少出现1个空白

{n} : n是一个数字表示前面的内容出现n次 \d{11} : 出现11位数字

{n,m}: n与m是一个数字,表示前面的内容出现n-m次

[a-zA-Z0-9]{6,15}:表示数字和字母的组合出现6-15位

{n,} : n是一个数字, 表示前面的内容出现n次以上

(): 将括号内的内容看做一个整体

1234出现3-6次

(1234){3,6}

1234或者5678出现3-6次

(1234|5678){3,6}

fancq@

qq: 11716818

范传奇_Xiloer

java中的时间与日期

Date类

java.util.Date类

该类的每一个实例用于描述一个时间

内部维护一个long1970

y: 表示年

yyyy: 使用4

yy: 使用2

M: 表示月

MM : 表示2位数字的月

d : 表示日

dd:表示两位数字的日期

h : 表示小时 12小时制

hh : 两位数字的小时

H :表示小时 24小时制

m : 表示分

mm : 两位数字的分

s : 表示秒

ss :表示两位数字的秒

E : 表示星期

a : 表示上下午

在一个日期格式字符串中出现的其他字符

按原意显示

yyyy-MM-dd HH:mm:ss

方法:

Date --> String的过程 String format(Date date)

将给定的日期对象按照给定的日期格式转换为 字符串

String --> Date的过程

Date parse(String str)

将给定的字符串按照给定的日期格式转化为 Date对象

DateFormat类

该类是

转换为字符串

Calendar类

Calendar

使用哪个子类实现。

包装类

8个基本类型数据不能参与面向对象的开发, 因为其不是Object的子类,所以不能以多态 的角度看待他们。

为此,java为8个基本类型数据提供了包装类

基本类型 包装类

int java.lang.Integer char Character

byte Byte

short Short

long Long

float Float

double Double

boolean Boolean

包装类都支持两个常量:

MAX_VALUE:获取相应基本类型数据的最大值

MIN_VALUE:获取相应基本类型数据的最小值

包装类均支持一个方法:

可以将字符串转换为对应的基本类型数据

parseXXX(String str)

java.math.BigDecimal

java.math.BigInteger

大整型。可以保存的数字比long还大。

java中的集合框架

Collection接口

该接口是所有集合的超类

Set集:不重复集

通常Set集为无序集(但不绝对)

所谓不重复,指的是在Set集合中

不能出现两个元素equals比较为true的

List集:可重复集

List是有序集

Collection

int size():

boolean isEmpty():true

void clear()

清空集合

boolean add(E e)

向集合中添加元素,添加成功返回true

boolean remove(Object o)

从集合中删除给定元素,删除成功返回true

boolean addAll(Collection c)

将给定集合中的所有元素添加当当前集合

boolean removeAll(Collection c)

删除当前集合中与给定集合相同的元素

Iterator iterator()

返回用于遍历集合的迭代器

List集合 可重复集

List也是接口

有两个常用实现类:

ArrayList与LinkedList ArrayList:内部使用数组实现

LinkedList:内部使用链表实现

List集合

常用实现类:

ArrayList:

LinkedList:

根据实现方式不同ArrayList

LinkedList

泛型

java1.5

增强循环

语法:

for( 元素类型 e : 循环体

}

简化遍历集合或数组的

作业:

书写一个类LinkedList

内部使用链表实现

提供以下方法:

boolean add(E e)

boolean remove(E e)

int size()

面试题:

请写出一个程序,输出1+2+3+4..+100

每累加一次,输出一次结果

要求:程序不得超过20

程序不得出现while for等关键字

queue 队列

队列也是用来保存一组数据,但是有别于数组

和集合,队列存取元素必须遵循先进先出原则

FIFO(First input First Output)

LinkedList具有存取效率高的特点,所以使用该类也作为队列的实现类使用

队列的遍历是一次性的。想要获取队列中的

某个元素,必须先将队列中该元素之前的所有

元素从队列中取出后才可以访问

队列的相关方法

boolean offer(E e):

向队列末尾追加新元素(入队)

E poll()

(出队

E peek()

Deque双端队列

所谓双端队列即:

就形成了经典的数据结构:栈

使用栈是为了操作有可追溯性

通常我们实现某个操作有后退功能时,常使用

Comparable接口

该接口的实现类是可比较的

实现该接口必须重写其中的一个方法

public interface Comparable{

public int compareTo(T t);

}

compareTo方法的返回值:

返回的整数不关心值具体是多少,关注的是

取值范围

当返回值>0 :当前对象比给定对象大

当返回值<0 :当前对象比给定对象小

当返回值=0 :当前对象与给定对象相等

Set集合

不重复集:Set集合中不会出现两个equals为

true的元素

Set集合的实现类:

TreeSet:使用二叉树实现

HashSet:使用散列算法实现

对于HashSet的hashcode()方法

hashcode()方法是Object定义的方法

所有的类都具备该方法

通常我们重写一个类的equals

连同重写hashcode()

重写hashcode的注意事项:

hashcodeequals比较的属性值发生改变。

当两个对象equals时,

两个对象的hashcode()

当两个对象不要求

会提高散列表性能

MAP

Map是一个多行两列的表格

每一行存贮一项

一项包含两部分,key-value

其常用的实现类:HashMap

使用散列算法实现的Map

Map常用的方法:

V put(K k,V v):

将一组key-value对存入Map。因为Map要求

key不允许重复,所以若使用相同的key存入

不同元素时,是替换value操作。put的返回值

返回的即是被替换的value

V get(Object k):

根据给定的key获取对应的value,若给定的key

不存在,则返回null

HashSet就是使用HashMap实现的

它利用了HashMap对于key不允许重复,以及

散列算法的优点。

HashMap的性能调优

Capactity:容量,HashMap

Initial capactiy:

Size:map中存放的元素数量

load factor: 这是一个比值:size/capacity

当这个比值超过0.75

)

遍历Map

遍历Map有三种方式:

遍历所有的key

遍历每一组键值对

遍历所有的value(的使用中较少)

设计模式

设计模式分为三个类别:

创建型模式:单例模式,工厂模式 等

结构型模式:装饰模式,代理模式 等

行为型模式:模板模式,迭代器模式 等

单例模式:

当一个类套用了单例模式后,该类可以保证

任何时候都只能有且仅有一个实例。

模板模式:

定义一个操作中的算法过程骨架,而将一些

步骤延迟到子类实现。

java中的异常处理机制

java中异常结构中定义的父类为Throwable

其派生出两个子类别:

Error:用于表示jre的错误.该类错误是无法通过程序解决的。

Exception:表示程序级别的异常,该类错误是可以通过程序解决的

java异常捕获机制

try语句

语法:

try{

可能出现异常的代码片段

}

catch块

catch块跟在try

异常

语法:

catch(XXException e){

}

catch

java IO

Input与Output

java

File类

该类的实例是用于描述文件系统中的一个

文件或目录的

File的作用是用来访问其描述的文件或目录的

属性信息,对于文件而言,File不能访问其

内容!

File可以用于操作文件或目录

操作:创建或删除 文件/目录

1) 递归删除

2) 递归列目录的内容

listFile(File file)

分析: 想清楚顺序

1) 检查参数

2) 如果是文件, 就输出文件名//结束条件

3) 如果是目录

4) 输出目录名

5) 找到这个目录的所有内容

6) 列每个子目录(文件)的内容//递归

3) 有条件的列出目录的内容

1) 查找全部的文件夹内容

2) 如果满足条件(.java 文件)

String .endsWidth()

列出扩展名是ext的文件

}

总结类

2) (/文件 修改文件名 删除 list) 3) new File() ! 使用 exist() /.

4) File 类不能操作(!

RandomAccessFile !

byte by byte

1) byte(字节, 8个位)

2) 使用文件指针(下标) 读写文件内容, 一次读写一个byte!

3) 当读写文件内容时候, 文件指针自动加1,

为了方便下次读写!

4) 为了方便基本数据类型, 提供了基本数据类型的读写方法 底层就是以byte为单位的读写操作.

文件是什么: 是一个长长的Byte有序序列!

有序号: 0 1 2 3 4 ... length - 1 个Byte

length 的类型是long!

数据容量 16G u盘 5M的MP3歌曲

16 * 1000 * 1000 * 1000 Byte

5*1024*1024 Byte

RandomAccessFile API

1) 构造器 打开文件, 状态 "r" "rw"

如果是写时候, 文件不存在就自动创建文件

打开时候, 默认文件指针位置是0

如果打开已经存在的文件, 立即写, 就是对文件 的内容覆盖

如果将文件指针跳到 length 就是接着写

2) 读写方法

int b = read() 读取一个byte (读取结果填充到地8位) read() 如果返回 32个1 表示读取到了文件尾部! write(int b) 写出一个byte(int 数据的低8位)

3) seek(long pointer)

4) 文件读写结束以后 close() 关闭文件

5) length() 返回文件的长度!

java

输入流与输出流

输入流:用于读取数据输出流:用于写出数据

流根据处理的单位化为分:

字节流与字符流

字节流:以字节为单位读写数据

字符流:以字符为单位读写数据

流还分为:

高级流:不能独立存在,必须基于另一个流工作

低级流:数据有明确的来源或去向

字节输入流与输出流的父类

InputStream:字节输入流

OutputStream:字节输出流

以上两个流是抽象类,不能直接实例化。

FIS与FOS

FileInputStream:文件字节输入流

FileOutputStream:文件字节输出流

用于读写文件的流

BIS与BOS

BufferedInputStream:缓冲字节输入流

BufferedOutputStream:缓冲字节输出流

这两个流是高级流

高级流:

目的:

DIS与DOS

DataInputStream:

字符流

Reader与Reader:

Writer:

unicode

ISR与OSW

InputStreamReader:字符输入流

OutputStreamWriter:字符输出流

BR与BW

缓冲字符输入输出流

可以按行读写字符串

1.Oracle相关概念

1.1 什么是数据库?

数据(Data):程序处理的字符串、数值、日期、图片、多媒体等信息。 数据库(DataBase):指的是按一定结构和关系存储的数据集合。 关系型数据库:以表结构作为数据存储。

NoSQL(非关系型数据库):以键值对结构作为存储

DBMS(数据库管理系统)

如:Oracle、MySQL、DB2(IBM)、1.2 为什么使用数据库?

--适用于大量数据存储和操作

--便于对数据增删改查,效率高

--安全性高

1.3 什么是Oracle?

OracleLarry

2.1 Oracle

--SqlPlus --SqlDeveloper --其他图形工具,DBA 安装Oracle服务器(DBA)? 创建一个库/SID(DBA)? 创建用户,进行授权(DBA)? 利用客户端登陆(使用者)? 2.2 Oracle环境搭建

编写SQL命令操作数据库(使用者)

2.5登陆远程主机的SQLPLUS命令行工具

--登陆:telnet (主机名)172.16.11.45

--输入远程主机的用户名和密码

--输入sqlplus命令启动SQLPLUS客户端 --输入登陆Oracle用户名和密码

3. Oracle使用入门

3.1 SQL命令类型

--DDL语句

Data Definition Language数据定义语言

负责在oracle服务器中定义和修改表结构

--DML语句

Data Manipulation Language数据操作语言 负责向oracle服务器表添加、删除、更新数据 Data Query Language数据查询语言 负责查询oracle服务器表中的数据 --DQL语句

--TCL语句

Transaction Control Language

负责事务控制和管理,用于将若干个DML

Oracle在执行DML操作后需要执行TCL

--DCL语句

Data Control Language

3.2 SQL初步了解

--什么是表?

/

--SQL ;

--

表名;//查看表结构

表名;删除表

--插入操作

1.字符串处理

1.1 字符串类型

char,varchar,varchar2,nvarchar2,long,clob

1.2 varchar和varchar2的区别

varchar类型是由国际标准组织ANSI制定的字符串类型。 varchar2类型是Oracle公司自定义的字符串类型。目前两者功能一致。 Oracle建议使用varchar2. char固定长度的字符串,可以不定义长度,缺省值为1,定义时最大值为2000字节

varchar2可变长的字符串,必须定义长度,最长4000字节 1.3 char和varchar2区别

char效率比varchar2高

——————————————————中文存储———————————————— 开辟空间单位为字节,能存多少字符与编码有关。

Unicode:字母、中文都是占两个字节! --查看Oracle数据库存储编码命令:

select USERENV('LANGUAGE') "Language" FROM DUAL;

使用建议:开辟varchar2大小时设置值=存储字符数*3;

1.4 nvarchar2类型

nvarchar2采用的是Unicode编码存储。

nvarchar2(5)可以存储5个字符:汉字或字母都可以。

1.5 long,clob long:可以存储2G大小的字符,clob:可以存储4G

=============================1.~小结~.1=a.如果存储的字符串长度固定采用charvarchar2 b.varchar2大小指定建议为字符数*3

c.如果超过4000字节存储,采用long或d.varchar与varchar2,使用必须指定存储大小

2.

2.1 字符串连接

concat(, 2)

1, 字符串concat

uppers 2.2 2.3 过滤空格 trim(s):过滤sltrim(s)、2.4 补足位数

lpad(s,n,char):对sn位,在左边补充char字符

rpad

提示:如果s字符串大于n,功能是截取前n个字符,lpad和rpad没区别

2.5 截取

substr(s, b, n)从s的第b个字符开始连续截取n个,b<0则从倒数第b位开始向尾部截取n个,n<0则为null

2.6查找

instr(s, c, n, m)

在s中从第n个字符开始查找,返回第m个c出现的 位置。

2.6长度计算

length(s)

计算s字符串的长度,中英文都算一个字符

3.数值操作

3.1 Oracle中数值类型

利用number定义整数,浮点数

number:即可以存储整数,也可以存储小数,p最大可以到38,s在-84到127之间 number(p):定义p位整数

number(p,s):表示浮点数,s表示小数点小数的位数;p表示有效数位数;

=============================1.~小结~.1=========================== a. number(p)表示整数,整数位最多为p位

b. number(p,s)整数位超出p-s位,采用四舍五入截取操作

--s>0情况,对小数点右侧最多保留s

--s=0--s<0情况,对小数点左侧s

c. 当p

1.

1.1

?1 ?1.346 trunc(n,s):,保留mod(n1,n2):计算 floor(n):返回小于等于的最大的整数 ceil(n): 返回大于等于n的最小的整数 sign(n):符号函数!n>0, 返回1;n<0,返回-1; n=0返回0. ss是表示取整; s>0s<0是从小数点往前数。 1.2 取余数 1.3 取整函数 1.4 符号函数

2.日期时间操作

2.1 日期时间类型

date:Oracle存储年、月、日、小时、分钟、秒;MySQL存储年月日。

timestamp:时间戳

使用建议:如果关注年月日信息用date,如果关注年月日时分秒用timestamp

2.2 默认系统时间

sysdate:Oracle服务器系统时间 systimestamp: Oracle服务器系统时间 Oracle默认时间格式是:DD-MM-RR(日-月-年)! last_day(date):返回当前日期月份的最后一天 2.3其他日期函数

next_day(date,weekday):从当前date时间开始计算,下一个星期几(weekday)的日期(离date最近的日期)

add_months(date, n):对date日期月份加n操作; months_between(date1,date2):date1与date2之间相隔的月数, extract(year/ month/day from date):从date时间取出年月日 least(n1,n2,n2.n3...):返回n1,n2,n2.n3...中的最小的值 greatest(n1,n2,n2.n3...):返回n1,n2,n2.n3...

=========================1.~日期小结~.1=1)会使用date和timestamp类型定义表格

2)会使用sysdate,systimestamp

3)会使用to_date,to_char,to_timestamp

4)会使用add_months函数

3.空值操作

nullnull。 ----nullnull,需要使用空值函数nvl(字段,值)处理: -- nvl(1)则返回值1;如果不为null返回字段值; -- nvl2(字段,值12): null则返回值1;如果为null返回值2; null。 3.1 如何写入 *3.4 1.DDL语句

负责创建、删除、修改表结构; --create table t(); --create table t_125 as select c1 from t_124; 1.1 创建表

1.2 删除表

--drop table t;删除表结构放入回收站 --drop table t purge;直接删除不放回收站 --flashback table t to before drop;可以将非直接删除的表恢复 --表名和字段名最大长度是30,如果用中文最大是15个 --表名和字段名必须以字母开头,不能使用数字或“_”开始。 --表名和字段名不能重复、与关键字冲突。 向已有表结构添加列 alter table t add sex char(1); 1.3 标识符命名规则 *1.4 修改表结构

改变目标表结构的字段值类型alter table t_125 modify sex varchar2(1); 致alter命令失败。

删除列:1.5 修改表名和字段名

rename t1 to t2;将表t1名字改为t2; 中的c1改名为default! primary key 1.6 如何设置字段默认值 *1.7 主键约束

primary key(1,

?*代表所有字段

from...

where... ?group by...?having... ?

order by...?

2.1最简单的select select * from table;

*2.2 where使用>,<,>=,<=,!=,<>判断符

判断符号左右的值类型必须相同。 and:且,关联多个条件都要满足 or:或,关联多个条件满足一个即可 and 与or并用时,and优先级高于or,可以使用()提升优先级别 主要用于字符串类型的模糊查找 ?_?表示一个任意字符,“%?表示0到多个任意字符 *2.3 在where中使用and或or连接多个条件 *2.4 where使用like过滤条件

--查询ename中以A开头的ename;

select ename from emp_111 where ename like 'A%'; --查询名字中第二个字母为O的 select ename from emp_111 where ename like '_O%'; 主要用于数值类型的包含边界值的区间判断 ....where d1 between...and... 查询d1字段值在c1,c2,c3...当中的信息,等价于or

......where d1 in(c1,c2,c3...); *2.5 在where中使用between...and... *2.6 在where中使用in或not in

2.7 在where使用any或all >any(值1,值2,值3...)>all(值1,值2,值3...)*2.8 在where中使用is null和

用is null和is not null的信息

2.9 过滤重复记录

select ...distinct 值1, 值2,值作用:distinct order by 字段ascasc表示升序,asc 2.10 order by 排序

2.11

count(c1)值为非空的个数 在使用等聚合函数时,默认将查询出来的当作一组。如果需要将查询出来的 。每一组执行一次max,min等函数计算。

中,不允许出现在where中。

DQL查询语句(续)

group by(续)

提示:group by使用规则,

by max(sal) desc;

select后出现的字段,除了聚合函数中的字段外,都必须跟在group by后面 --select deptno,ename,max(sal) from emp_111 group by deptno,ename order

===============select中使用别名==============

1)select deptno as no,ename as name, sal+nvl(comm,0) as total from emp_111; //由于select在order by之前执行,因此order by 可以使用total别名。语句中的as可以省略

select deptno as no,ename as name,max(sal) as total from emp_111 order by total desc;

2)from后面指定别名

select e2.ename from emp1 e2,emp,e2;

//主要是为了避免多表查询时,字段名重复时冲突(emp1和mep2都有ename字段)

1.子查询

select 语句可以嵌套使用,一个select。 select子查询可以出现在部分出现,子查询时用()括起来。

*1.1 where部分出现select

在where--单行子查询:

在where子查询必须返回一个结果 --多行子查询

在wherein,not in,any,all多个结果值

*1.2 from

empno,ename,sal+nvl(comm,0) as 使用子查询

having相似

//

select avg(sal) avg(sal)from emp_111) group by deptno;

1.4 在select

效率低,不推荐使用!

//查询部门编号及部门中工资大于2000的人数

2.多个表结构

2.1 笛卡尔连接

select * from ta,tb;

ta和tb采用笛卡尔积方式结合。即ta中每条记录和tb每条都结合一次,最后总记录数为ta记录数*tb记录数。

2.2 等值连接

等值连接:关联的两个表有字段对等时才作为返回结果

select * from t1,t2 where t1.c = t2.c;

select * from t1,t2 where t1.c = t2.c(+);//外连接,t1主,t2补 select t1.name,tb.name from t1 join t2 on(t1.c = t2.c); 返回的结果由关联表的某一方来决定。 2.3 外连接

select * from t1 left outer join t2 on (t1.c=t2.c);

left表示已左边的表t1为主显示,right则为右表t2为主显示,full为全外连接

复杂SQL查询语句写法:

--根据显示字段和条件字段判断查询哪些表

--将表采用的等值方式连接,指定on关联条件 --判断采用等值连接or外连接 --编写where,select,order by......

--查询10

select e.empno 员工编号,e.ename 员工姓名 where e.deptno=10;

--查询员工名字中含O

select e.ename ,d.deptno 编号

--

编号,d.dname 名称,d.loc 所在地,

人数 编号,d.dname 名称,d.loc 所在地, count(*) 人数from emp_111 e d on(e.deptno=d.deptno) group by

提示:join...using等值连接,使用时,两个表关联字段名字和类型要一致,在select,where中不使用限定词修饰。

2.4自连接

=========================1.~小结~.1=========================

1. 等值连接

from...join...on... 关联的两个表是同一个。

from inner...join...on...

from...join...uesing...

2.左外连接

from...left outer join...on...

from...left outer join...using...

3.右外连接

from...right outer join...on...

from...right outer join...using...

4.自连接

自连接时上面等值或外连接的特殊情况,关联的双方是同一个数据表。

1.分页查询

(一页10条) 第1页 1~10,第2页,第 21~30 *1.1如何获取前n(Top N查询) 在oracle中利用列实现。rownumselect语

提示:rownum值rownum当做过滤条件只能使用。 ,

6查询第2页记录.1-6??2,13-18?3,...,第n页 >=(n-1)*6+1?<=6*n

2.2.1 decode

oracle特有的,.使用格式如下:

decode(字段,值13,...,默认值)

典型应用===========

decode适用于等值判定,case when更合适大于小于或区间判定

建议:空值判断适用nvl或nvl2;等值判断适用decode;非等值判定采用case when

3.集合操作

针对两个select查询结果集进行操作 union:合并两个select结果(去除重复记录) union all:合并两个select结果(不去除重复记录) 使用格式如下: 3.1 合并操作union和union all

select ename,empno,job,sal from emp_111 where sal<1000 union select ename,empno,job,sal from emp_111 where sal>=3000 order by sal;

3.2 intersect交集操作

去两个select结果中重复部分

select ename,empno,job,sal from emp_111 where sal<4000 intersect

select ename,empno,job,sal from emp_111 where sal>=2000 order by sal;

3.3 minus 差集

select ename,empno,job,sal from emp_111 where sal<4000 minus

select ename,empno,job,sal from emp_111 where sal>=2000 order by sal;

--两个select --对集合操作的结果排序,order by 后面。 集合操作使用注意事项:

4.分析函数(排名函数)

//查询工资最高的信息

4.1 by 字段1 order by 字段2)

row_number()成组内编号)。

deptno分组,sal降序排列,再之后形成组内记录的编号

4.2 : ? 123456

? 113446

? 112334

*1.约束

--非空约束:要求字段值不能为null;

--唯一约束:要求字段值不能重复,但可以为null;

--主键约束:非空且唯一; 约束作用:负责限制表中字段值,使得数据更加合理合法。在Oracle中可使用以下5种约束。

--外键约束:要求字段值必须在另外一列存在,可以为空;

--检查约束:要求字段之必须符合指定条件。

1.1 非空约束

-----建表时添加-----

create table t(name varchar2(20) not null,age number(3));

-----建表后添加-----

alter table t modify age number(3) not null;

--------取消--------

alter table t modify age number(3) null;

1.2 主键约束

-----建表时添加-----

create table t (id number primary key,name number(3)); create table t(id number,name number(3),constraint约束名 primary key(id));

-----建表时添加----- alter table 约束primary key(id);

-----建表时添加约束名1.3 唯一性约束

-----建表时添加-----

create table primary uq2 unique(email));

-----取消

1.4 -----create table number(3) check (age>0 and -----建表后添加--------取消alter table t drop constraint check_age;

允许为空,不执行check检查

1.5 外键约束

create table t1(name varchar2(20)unique,deptno number(4) references t2(dno));

create table t2(dname varchar2(20),dno number(4) primary key,constraint foreign key(dname) references t1(name));

========约束注意事项========

a. 唯一、外键及检查约束允许为null,非空、主键约束不允许为null;

b. 一个表只能定义一个主键,但主键字段可以由个或多个承担;

c. 外键字段参考的另外一列字段必须是主键或唯一的约束字段;

2.视图

2.1 什么是视图

视图封装了一个复杂的select查询,没有数据存储空间,只存储了一个select语句。

2.2 有什么作用

视图可以在from子句中使用,select * from 视图。

视图有以下优点:

--可以简化select查询 --可以屏蔽掉一些敏感或安全数据

--

*2.3 视图的使用

创建一个视图:

删除视图:

drop view 视图名

提示:对视图进行DML图执行的DML

*3.

起始值(默认为1)][increment by递增值(默认1)][ 大最大为10^27)][cycle|nocycle(默认

----插入时使用序列生成主键值---

4.索引

作用:在某些字段上创建索引可以提高查询效率。

-------------创建索引--------------

create index 索引名 on 表名(字段);

可以提升“字段”当条件的查询效率

-------------删除索引---------------

drop index 索引名

a.以下情况适合定义索引:

--主键和唯一约束的字段(自动创建索引)

--外键字段

--经常在where中当作过滤条件的字段

--表连接条件字段

--经常在order by 和group by的字段

b.以下情况不适合加索引:

--使用到了函数条件

where upper(ename)=’SCOTT’;

--使用了表达式条件的字段

where sal*1.2>20000; --使用了隐式数据类型的条件

where sal>’1000’;

--空值条件

where comm is null;

--使用了like条件的字段

where ename like ‘_a%’

--使用了否定条件:<>、!=、

delete from emp;?DML,可以truncate ?删除表数据,属于DDL

?DDL

1、什么事)

1、扩展web

大多数webhtml文件写好),不能够处理动态资源的请求(即需要依据请求参数进行计算,然后生成相应的页面)。

2、组件规范 a.组件是什么~ 符合一定规范,并且实现部分功能的软件模块。 b.容器是什么~ 符合一定规范,提供组件运行环境的程序。

2、如何开发Servlet?

step1. 写一个java类,实现Servlet接口或继承HttpServlet抽象类; step2. 编译; step3. 打包:建立一个具有如下结构的文件夹: ---- appname WEB-INF classes(放.class文件) lib(放.jar文件web.xml(描述文件) ---- ---- ---- ---- step4. 部署;将step3容器特定的文件夹下面。 注意:也可以将step4jar.war为后缀)。

step5.

3、什么是

1.网络应用程序; 2.web服务器,客户端与服务器端使用标准的http协议进行通信。

4、servlet是如何运行的?

step1. 浏览器依据ip,port建立与servlet容器之间的连接;

step2. 浏览器将请求数据打包(生成请求数据包)并发送给容器;

step3. 容器拆包(解析请求数据包),将解析的结果封装到servlet上,同时,容器

还会创建一个响应对象;

step4. 容器依据请求资源路径,找到servlet的配置信息,创建该servlet对象; step5. 调用servlet的service方法,会将事先创建好的request,response作为参数传递请求;

step6. 在service方法里进行业务逻辑的处理,可以调用request获得请求参数,也可以将处理结果写到response;

step7. step8.

1

1. 404 1) 2) a. c.忘记部署。 3)对应解决方式:

a.按照来检查请求资源路径; b.检查servlet-name的配置; c.重新部署;

注:

404是一个状态码(是一个三位数字,由w3c定义,表示服务器处理请求的一种状态)。

2. 405 1)含义:找不到处理方法。 2)错误原因:service方法未按标准格式写。 3)解决方式:仔细检查service方法签名。 3. 500 1)含义:系统错误; 2)错误原因: a.类名写错; b.程序运行出错: 3)解决方式: a.检查 b.

2、http

1、什么是http 由w3cweb服务器之间如何通信以及通信过程中使用的数据格式。

? 如何通信

step1.建立连接;

step2.打包请求数据,并发送;

step3.服务器打包响应数据并发送;

step4.服务器立即关闭连接。

如果浏览器要再次发送请求,必须重新建立一个新的连接,即一次请求一次连接。 优点:服务器可以利用有限的连接为尽可能多的客户端(浏览器)服务; 缺点:状态无法管理。

? 数据格式

a.请求数据包:

请求行:请求方式 请求资源路径 协议类型和版本

GET /firstWebProject/chat HTTP/1.1

消息头:是一些键值对,由w3c定义,表示一些特定的含义,比如浏览器可以发送?uer-Agent?消息头告诉web服务器,浏览器的类型和版本。

实体内容:如果发送的是get请求,实体内容没有任何数据,只有发送post请求,才会有数据(请求参数)。

b.响应数据包:

状态行:协议类型的版本 状态码 状态描述

HTTP/1.1

常见状态码: 200:正常 404: 500: 200 OK

??告诉服务器返回的数据类型。

实体内容:程序输出结果 2、两种请求方式(get/post) 1)get请求? a. b. c. 2)get a.2k左右的数据)。

4)post请求特点 a.将请求参数添加到实体内容里面,可以提交大量的数据。 b.会将请求参数显示在浏览器地址栏,很不安全(比如路由器会记录请求地址)。 3)哪些情况下浏览器发送post请求? a.设置表单的method属性为post

b.不会将请求参数显示在浏览器地址栏,相对安全(不会加密);

3、servlet输出中文要注意什么问题?

(1)编码知识: a,java语言在内存当中,使用unicode字符集来保存字符。 b,编码:将unicode字符集对应的字节数组转换成某种本地字符集(gbk,utf-8等)对应的字节数组。

c,解码:将某种本地字符集)unicode字符集对应的字节数组。

(2)产生乱码问题的原因? out"iso-8859-1" (3) 解决方式 4

(1)? 注意: a,参数名,否则会返回null。 b,""。 2)String[] request.getParameterValues( String paramName); a,当有多个参数名相同,使用该方法。 (2)中文参数值如何读取? 1)乱码产生的原因 当提交表单时,浏览器会对表单中的中文参数进行编码(会使用打开表单所在的页面的字符集,比如"utf-8")。服务器端默认情况下,会使用"iso-8859-1"去解码。

2)解决方式 a,方式一 step1,保证表单所在的页面按照指定的字符集打开。比如,对于html文件,应该要添加上:

step2,服务器端按照指定的字符集解码:

注: 该方法只针对post b,方式二: step1,同上。

1、

step1,将驱动(.jar)拷贝到WEB-INF\lib下。 step2,在 练习: 写一个ListEmpServlet,以表格的方式显示所有员工 信息(id,name,salary,age)。

*2、重定向

(1)什么是重定向?

服务器通知浏览器向一个新的地址发请求。 服务器一般是通过发送一个302状态码和一个Location 消息头(值是一个地址,称为重定向地址),浏览器收到之后,会立即向重定向地址发请求。

(2)如何重定向? response.sendRedirect(String url); (3)需要注意的问题 a.重定向之前,容器会先清空response b.重定向之前,不能够调用(4)特点 a.重定向的地址是任意的; b.

练习:

3、

(1)dao? (2)如何写一个dao? step1,实体类 step2,写一个java类,提供操作表的所有的方法。 1、Servlet容器如何处理请求资源路径

比如,在浏览器地址栏输入:http://ip:port/appname/abc.html step1.容器依据应用名(/appname)找到应用所在文件夹;

step2.容器会假设访问的是一个Servlet,然后比较

1)精确匹配:要求的值必须是?/abc.html?; 2)通配符匹配:使用?*?来匹配任意的0个或多个字符; 比如:/* 3)后缀匹配:使用?*.?开头,后接任意的1个或多个字符;

比如:*.do会匹配所有以?.do?结尾的请求; step3.如果以上都不匹配,容器会认为访问的是一个文件,然后查找该文件,找到就返回,找不到就返回404;

2、让一个Servlet处理多种请求

step1.使用后缀匹配;:step2.3

1. 2.JDBC 某些??进行编码和解码。对于mysql驱动程:

?utf8?

mysql

*4、servlet

1.什么是servlet的生命周期

servlet容器如何创建servlet对象,如何对创建好的servlet对象进行初始化操作,

如何调用servlet对象的方法处理请求以及销毁servlet对象的整个过程。

2.servlet的生命周期分成几个阶段

1).实例化

a.什么是实例化 容器调用servlet的构造器,创建一个servlet对象。 注: 容器在默认情况下,不管收到多少个请求,只会创建一个servlet对象。 b.什么时候实例化 情况1:收到请求之后,才进行实例化操作; 情况2 大于等于0的整数整数值越小优先级越高。 2).初始化 a init方法。 b 已经提供了init方法的实现(将容器传递进来的ServletConfig

b2.override init()方法 c.init d.初始化参数的使用 3).就绪 a.什么是就绪 容器收到请求后就会去调servlet对象的service方法来处理请求。 b.如何实现自己的业务逻辑处理

b1.HttpServlet已经实现了service方法 b2.HttpServlet的service方法是这样实现的: 依据请求方式调用对应的doGet/doPost方法。doGet/doPost需要开发人员去覆盖override。

b3.实现自己的业务逻辑处理: 方式一:override HttpServlet的doGet/doPost方式二:override HttpServlet4).销毁 a.什么是销毁 容器在删除方法。 b.destroy c.

3.

1).Servlet response); destroy((); 2)GenericServlet 实现了Servlet接口中的部分方法,init、destroy

3)HttpServlet抽象类

继承了GenericServlet类, 实现了service方法

1、jsp(java server page)是什么

sun公司制定的一种服务器端动态页面生成技术规范。 (1)因为直接使用servlet也可以生成动态页面,但是过于繁琐(需要使用out.println()输出),并且不利于维护(如果需要修改页面,需要修改java代码)。所以sun公司才制定了这样一种规范可以非常方便地生成动态页面。

(2)jsp其实是一个以.jsphtml和少量的java代码。容器会将jsp文件先转换成一个对应的

2、如何写一个jsp文件

step1.创建一个以.jsp为后缀的文件;

step2. 1)html(:直接写 2)java代码: <% java<%= java表达式 %> 3)隐含对象 a.out, request, response b.为什么可以直接使用这些隐含对象 因为容器会自动添加获得这些对象的代码。 4)指令 a.什么是指令 告诉容器,在将jsp文件转换成java类时做一些额外的处理,比如导包;

b.指令的语法 <%@page 指令名称 属性名称=属性值%> c.page指令 import属性:导包。 <%@page import="java.util.*,java.text.*" %> contentType属性:设置response.setContentType的内容 d.include指令

file属性:告诉容器在将jsp类时,在该指令所在位置插入

file属性指定的文件的内容。

3、jsp是如何执行的

step1.容器先将jspjava类类)。 放到serviceout.write输出; 放到service 放到 %>

step2.调用...)。

注意: 容器收到访问jspjsp对应的servlet实例是否存在,如果存在就直接调用该实例的service方法,如果不存在或jsp文件内容发生了改变,则容器要将jsp重新转换成对应的servlet类,然后实例化。

4、转发

(1)什么是转发 一个web组件(servlet/jsp)将未完成的处理交给另一个web组件继续做。

常见的场景:一个servlet获得数据转发给一个jsp来展现数据。 (2)如何转发 step1.绑定数据到request对象上。 request.setAttribute(String name,Object obj); step2.获得转发器 RequestDispatcher rd = request.getRequestDispatcher(url); step3.调用转发器的方法来转发。

//如果绑定值不存在,返回null

(3)转发的特点 a. b.

1

而重定向不行。

*(1)web组件可以共享request和response对象,注:请求对象和响应对象的生存时间是一次请求与响应之间,当响应发送完毕,容器会立即销毁与之对应的request和response对象。

(2)转发之后浏览器地址栏的地址栏不变,而重定向会变 (3)转发的目的地限定于同一个应用,而重定向没有任何限制 (4)转发是一件事情未完成,而重定向是一件事情已经做完

2、路径问题

(1什么是路径问题 在链接,表单提交,重定向以及转发的时候,如何填写相对路径与绝对路径。 (2)什么是相对路径 不以?/?开头的路径,比如: (3)什么是绝对路径 以?/?开头的路径,比如: (4)如何写绝对路径 //获得应用名 *3

(1) 并且将多次交互所涉及的数据保存下来。

(2) a. 将状态保存在客户端,比如:Cookie技术 b.服务器端的状态管理方案 将状态保存在服务器端,比如:session技术 * (3)cookie 1)什么是cookie 是服务器临时保存在浏览器端的少量的数据。

2)cookie工作原理

览器访问服务器时,服务器将少量的数据发送(使用set-cookie消息头)给浏览器。浏览器会将这些数据临时保存下来,当浏览器再次访问服务器时,会将之前保存的这些数据发送给(cookie消息头)服务器。

3)如何添加一个cookie Cookie c = new Cookie(String name, String value); response.addCookie(c); 4)查询cookie Cookie[] request.getCookies(); 注意:有可能返回null 注: a.单位是秒~

b. seconds>0 浏览器会将超过删览器会将5)生存时间 cookie保存在硬盘上。

seconds<0 保存在内存里面,浏览器关闭

则cookie会被删除。

seconds=0 删除cookie ↓ Cookie c = new

6)编码问题

cookieASCIIASCII字符。URLEncoder.encode\URLDecoder.decode

7) a.cookie的路径与要访问的地址是cookie

添加发cookie路径等于/web06/biz01/ c.

的路径或者其子路径,浏览器才会将这个cookie发送给服务器。

cookie.setPath(String path);

1、cookie(续)

8)cookie的限制

a.cookie可以被限制 b.cookie不安全,所以对于敏感数据(比如账号,密码)一定要加密 c.cookie只能保存少量数据,约4k d.cookie数量有限制,一般不超过300 e.cookie只能保存字符串,要考虑编码问题

2、session

(1)什么是session 浏览器访问服务器的时候,服务器会创建一个属性,值唯一,一般称之为sessionId),服务器会将(默认使用set-cookie消息头来发送)。发送给服务器(cookie

(2) 时 ,如果没有,服务器会创建一个session对象;如果有,服务器会依据session对象。如果找到了,则返回,session对象。

b.flag=false 方式二:HttpSession s = request.getSession();

(3)常用方法

String session.getId(); //获得sessionId setAttribute(String name,Object obj); Object getAttribute(String name);

removeAttribute(String name); (4)session超时 1)什么是session超时 服务器会将空闲时间过长的session对象删除掉。 2)如何修改session超时时间限制 a.修改服务器的配置文件。 大部分服务器的缺省的时间限制是30分钟。 tomcat的配置文件

(conf/web.xml)

b.

c.调用 (5)删除

摘要加密(扩展)

:

a.(即使知道了加密算法)。 b.

1、过滤器

(1)什么是过滤器 Servlet规范中定义的一种特殊的组件,用来拦截容器的调用过程并进行相应的处理。 (2)如何写一个过滤器 setp1.写一个java类,实现Filter接口 step2.在doFilter方法里,实现拦截处理逻辑

step3.配置过滤器(web.xml)。 (3)过滤器的优先级 当有多个过滤器都满足过滤条件,会按照filter-mapping的先后顺序来执行 (4)初始化参数 a.配置初始化参数:init-param b.使用paramname); (5)过滤器的优点 a.可以实现?可插拔性?程序的正常执行。

b.

1

(1) servlet 主要监听两大类事件:a.生命周期相关的事件:当容器创建或者销毁了

request,response,ServletContext时产生的事件。

b.绑定相关的事件,调用了request,session,ServletContext,setAttribute和removeAttribute

(2)如何写一个监听器 step1.写一个java类,实现相应的监听器接口(比如,要监听session的创建和销毁,

要实现HttpSessionListener接口)

step2.在监听器接口方法当中,实现监听处理逻辑。 step3.注册。 (3)ServletContext 1)什么是Servlet上下文 容器在启动之后会为每个web应用创建一个符合接口要求的对象,称之为servlet上下文。

有两个特点: a.唯一性:一个web应用对应一个 b.一直存在:webservlet 2)如何获得 a.在方法 提供了方法 也提供了getServletContext();方法 提供了方法 3)作用 a.绑定数据 注意:绑定到上下文的数据,可以被该应用所有的组件访问,并且可以随时访问,因为Servlet上下文会一直存在;

Java零基础学习

b.访问全局的初始化参数 c.依据逻辑路径获得实际部署时的物理路径

2、servlet的线程安全问题

(1)servlet为什么会有线程安全问题 a.容器在默认情况下只会为某个servlet创建一个实例; b.容器收到一个请求就会启动一个线程来处理该请求,由这个线程来调用servlet的service方法;

c.有可能有多个线程同时调用servlet对象的方法,servlet的属性就有可能产生线程安全问题。

(2)如何解决 使用synchronized加锁!

3、如果禁止?

(1)什么是URL sessionId。

response.encodeURL(String url); 重定向:4、比较cookie和

1)session的优点 a.安全;b.能够保存大量的数据;c.能保存的数据类型更丰富 2)session的缺点 会将状态保存在服务器端(放在内存里面),如果用户量大会占用过多的内存空间。

5、上传文件

step1.设置表单提交方式为post,并且设置表单属性

enctype=?multipart/form-data?;

注意:http协议要求,如果要上传文件,必须这样设置。 step2.在服务器端,不能够使用request.getParameter();而应使用 request.getInputStream();一般使用工具来分析InputStream。 一、servlet小结

1、基础 (1)什么是servlet? (2)什么是servlet容器? (3)如何写一个? (4)servlet 2 (1) a.

b. step1.要保证表单所在的页面按照指定的字符集打开的; jsp:<%@page %> html:

step2.服务器端按照指定的字符集去解码:

request.setCharacterEncoding(?utf-8?);

(2)servlet如何输出中文

response.setContentType(?text/html;charset=utf-8?);

(3)容器如何处理请求资源路径

(4)如何让一个servlet处理多种请求

String request.getRequestURI();

(5)转发与重定向 a.什么是重定向 b.如何重定向 c.重定向需要注意的两个问题: d. e.什么是转发 f.如何转发 g. h. (6)servlet a.的生命周期? c.Servlet接口,HttpServlet抽象类,ServletConfig接口()

(7)ServletContext(Servlet上下文) a.什么是servlet上下文 b.有何特点 c.如何获得上下文 (8)Servlet的线程安全问题 a.为何会有安全问题

b.如何解决

3、状态管理

(1)什么是状态管理 (2)如何进行状态管理 (3)Cookie a.什么是Cookie b.如何添加一个cookie c.如何查询cookie d.编码问题:e.生存时间问题: f.路径问题:(4)Session a.Session

c.d.sessione.删除session:f.如何禁止cookie,如何继续使用session g.session与cookie的比较 4、数据库访问 (1)如何使用jdbc访问数据库 (2)DAO 5、过滤器与监听器

(1)什么是过滤器 (2)如何写一个过滤器 (3)过滤器的优先级 (4)过滤器的初始化参数 (5)过滤器的优点 (6)什么是监听器 (7)如何写一个监听器 6、典型案例与扩展

二、JSP基础

1、什么是JSP

2、如何写一个JSP step1.为后缀的文件 step2.(2)java <% %> <%= %> 声明:<%! %>(a1.jsp)

(3)指令

a.java类时做一些额外的处理,比如导包

缺省)/false) 当值为falsesession的代码

errorPage:jsp文件,由该jsp来处理当前页面的错误。

缺省):值为true时表示是一个错误的处理页面

让容器来处理异常:step1.将异常抛给容器;step2.在web.xml中配置错误处理页面

c.include:

(4)隐含对象 a.out:

b.request:

c.response:

d.session:

e.application:

f.exception:必须设置<%@page isErrorPage=?true?%>才能使用

g.pageContext:容器会为每一个jsp实例(jsp对应的Servlet对象)分配一个pageContext对象,该对象会一直存在,除非jsp实例被容器删除。

作用1:绑定数据setAttribute,getAttribute,removeAttribute 作用2:找到其他八个隐含对象

生命周期:ServletContext>Session>request>pageContext

h.config:ServletConfig

i.page:

(5)注释 :允许注释的内容是java代码,注释的内容会被执行; <%— 注释 --%>:不允许注释的内容是java代码。 3、JSP是如何运行的 STEP1.容器将.jsp文件转换成.java类)

1)注册

step1,建表 create table friend_user( id int primary key auto_increment, username varchar(50) unique, name varchar(255), pwd varchar(30), age int, gender char(1), phone varchar(20), ask text step2, 检查验证码,, 将用户信息插入到数据库,

(upload\pic_id) 2)登录 , 3)用户列表 step1,给UserDAO添加 List findAll(); step2,ActionServlet 调findAll方法,然后转发userList.jsp step3,userList.jsp 4)用户详细信息 step1,建表 create table friend_pic( id int primary key auto_increment, picName varchar(200),

userId int )type=innodb; step2,实体类 Pic step3,PicDAO public void save(Pic pic); public List findByUserId(int id); step4,给UserDAO添加 User findById(int id); step5,userDetail.jsp

1、jsp标签和el表达式

(1)js标签是什么? 因为直接在jspjavasun公司制订了标签技术规范。

jspjsp标签看作是一个占位符,容jsp代码,有了jsp标签之后,就可以将jsp中的jsp标签也可以复用。

(2)el eljsp标签的属性赋值,也可以直接输出。 (3)el表达式的用法 1)访问bean的属性 第一种形式:${user.name}:容器依次从

pageContext,request,session,application中查找绑定名称为?user?的对象,找到之后,调用getName方法然后输出。

注意: a.依次:先从pageContext查找,找不到再从request查找,...... b.如果最终找不到,会输出??; c.会将null转换成空字符串输出; d.如果要指定查找范围,可以使用:

pageScope,requestScope,sessionScope,allicationScope...

${sessionScope.user.name} 第二种形式:${user[?name?]}允许[]还允许[]中出现从0开始的下标,用来访问数组中的某个元素。

2)出。

a.算术运算:* %;注意:+ b.> >= <= == c.&& || ! d.emptytrue,否则返回false,null是true,找不到也返回true。

3)获取请求参数值

(4)jstl标签(java standard taglib)是apache捐献给sun公司的一套jsp标签 1)如何使用jstl标签 step1.要将jstl标签对应的jar文件拷贝到WEB.INF\lib下。 注意:如果使用的是javaee5.0或者以上版本就不需要拷贝了。 step2.使用taglib指令引入标签 2)jstl核心标签

a.if: 当test值为true,容器会执行标签体的内容。 test属性一般使用el表达式来赋值。 命名空间:用来区分同名的元素,前缀:命名空间的别名 var属性:指定一个绑定名称 scope属性:指定绑定范围(page,request,session,application) b.choose when表示例外,可以出现0或1次。

c.forEach 用来遍历集合或者数组 itemsel varscope,绑定值是集合中的一个元素(

固定值是,绑定值是一个特指方法(返回正在被迭代的对象

(.tld),接下来,依据标签的名称

(5)自定义标签 step1.写一个javaSimpleTagSupport step2.override doTag方法,编写相应的处理逻辑 step3.在.tld文件中描述该标签。 .tld要放在WEB-INF下,可以参照c.tld写。

可以是:

empty:没有标签体

scriptless:有标签体但是标签体的内容不能出现(<%@ %><%! %><%= %>)

JSP:有标签体

更多相关推荐:
最新java学习计划

java笔记从菜鸟到j2se精通j2ee的高手之路对初学java的人有用进来的所有人不管你是不是懂点java皮毛还是一窍不通的如果你选择看完我下面的话和每天下载我的笔记代码观看学习那相信08年底既是属于我的成功...

Java学习路线图,专为新手定制的Java学习计划建议

Java学习路线图专为新手定制的Java学习计划建议怎么学习Java这是很多新手经常会问我的问题现在我简单描述下一个Java初学者到就业要学到的一些东西首先要明白Java体系设计到得三个方面J2SEJ2EEJ2...

Java学习规划

Java学习规划,内容附图。

java学习计划

自恋青年java学习计划学习时间周一到周五每天22302400周末时间自由支配选择两个小时进行本周学习内容的考核以及项目辅导详细计划

Java学习计划

网上搜集整理争取运用到自己身上第一阶段目标掌握基础中的基础1学习面向对象程序设计2学习java2编程思想3学习oracler基本知识4学习html以上的学习边理论边上机第二阶段巩固自己的基础知识1精读think...

Java学习计划

软件开发学习概要1Java基础学习高级编程2SQL3Android手机开发4HTMLCSSJavaScript5PHP说明每学完一块都要做一个综合实例否则等于没有学UI设计学习概要1Photoshop2HTML...

Java学习计划

Java学习计划Java学习计划好的计划是成功的一半今天是在创新思维的第一节课在这门课程的开始一个有策略的有目的性的计划是非常必要的为了在以后的学习中能够达到最好的效果39坚持39是一把雕刻刀不断地将我这颗顽石...

Java入门:Java学习计划!

Java入门Java学习计划一基础奠基Java基础无需多说必须学1Java入门第一季欢迎来到精彩的Java编程世界Java语言已经成为当前软件开发行业中主流的开发语言本课程将介绍Java环境搭建工具使用基础语法...

新手java学习路线图

阶段内容目标第一阶段以Tetris项目贯穿掌握常见的数据结构和实用算法培养良好的企业级编程习惯掌握面向对象的基本原则以及在编程实践中的意义掌握Java面向对象编程基本实现原理Java语言基础算法基础常用数据结构...

java程序员职业生涯规划

java程序员职业生涯规划范文一位哲人说过走好每一步就是你的人生人生之路说长也长是因为这是你一生所要走的艰难险阻的跋涉人生之路说短也短因为你度过的每一天就是你的人生每个人都在计划自己的人生都在实现自己的梦想而我...

java程序员如何做好职业规划

java程序员的职业规划如何做java程序员职业规划经验分享生涯设计公益网职业规划专题组推荐本文主要介绍java程序员的职业规划希望能给想在java程序发展还没有职业规划的朋友一些启发一java程序员职业规划步...

java程序员的职业规划

java程序员的职业规划本文主要介绍java程序员的职业规划希望能给想在java程序发展还没有职业规划的朋友一些启发一java程序员职业规划步骤java程序员职业规划第一步1基础必备至少看过2本语言基础书和一本...

java学习计划(12篇)