java知识点复习
一、Java运行原理
1. 开发环境
Jdk:Java开发工具包---》Java:sun公司,被Oracle所收购
最新版本
JDK1.8以上的版本,是不需要配置环境变量(Java_home,classpath,path)
2. Java特点
- 跨平台:window,linux
- 健壮性:一套处理异常机制的体系
- 面向对象:对象与对象之间的关系(C语言:面向过程)
Java是编译型语言,Java文件---》.class--->执行
Python:解释型语言
3. Java开发工具
.Jar文件封装的N个class文件
Java project --》package---》Java文件
//放在首行的是package关键字,管理java文件 package com.hyg.ch01; import java.util.Date; //如果需要导入其他包下的类,import(java.lang是语言包,默认导入) //public:公有权限,class是类的关键字,HelloWorld是类名,建议类名首字母大写 /** * * @author Administrator * */ public class HelloWorld { /* * 入口方法main(alt+/) static:静态,void:没有返回值,参数:字符串数组 */
public static void main(String[] args) { System.out.print("欢迎");// 控制台打印后换行 System.out.println("Java");// 控制台打印后换行 System.out.println("Java");// 控制台打印后换行 Date now = new Date();//演示import关键字 System.out.println(now); }
}
|
二、Java基础
2.1标识符
Main:正确,标识符区分大小写,main方法是小写
1ch01:错误,标识符不能以数字开头
Hello World:错误,只能包含_,$,其余的符号都不可以
常见的关键字:
static(静态修饰符)
访问修饰符:public private protected
native ,final(最终的),main ,void(没有返回值),return ,break,continue;
2.2分隔符:
有意义的分隔符和无意义的分隔符
2.3常量
final关键字 ,值不会被改变,常量名建议大写
final double PI=3.1415;
2.4变量
数据类型 变量名;
要求:想使用变量,必须进行初始化
① int a =5;
② int b; b=3;
2.5 数据类型
两类:8个基本数据类型和引用类型
char: 字符型,用单引号存储,只能放一个汉字或者一个字母或者一个数字
String:字符串,引用类型,有地址空间,用双引号存储
//整数 int i =1558; long j = 155889988888L;//长整型:数字后面加L short s = 48; byte b = 5; //浮点数 float f = 1.23f;//后面必须指定f double d = 1.2348911;//后面可以不指定d double d1 = 1.23489d;//后面可以指定d //字符:占两个字节 char c = 'a'; char c2 = '1'; //char c3 = "a";//错误的原因:char不能转换为String char c1='中';//1个字符是两个字节,汉字可以用Unicode存储,一个汉字也是占两个字节 String string= "中";//引用类型,一般使用字符串进行存储汉字 //System.out.println(c1); //布尔类型 boolean b1 = true;//true 或者false |
引用类型:类,数组,接口(模拟多继承),枚举,注解,字符串
2.6作用域
全局变量:应用于整个类
局部变量:某个方法或者程序块
2.7运算符
6个类
①算术运算符:/ % a++ ++a
②比较运算符:得到的结果true或者false,判断两个变量是否相等==,不相等 !=
③逻辑运算符:非、与&&、或||
④位运算符:二进制
⑤赋值运算符:=是指赋值,a+=b等价于a=a+b
⑥三元运算符(条件运算符)(表达式)? 成立的结果:不成立的结果
2.8分支语句
- if-else
①只有一个分支
if(表达式){}
②两个分支
If(表达式){
}else{
}
③两个分支以上
If(){
}else if(表达式){
}else{
}
- switch .....case
Switch(表达式){
Case 1:
语句;
Break;
Case 2:
语句;
Break;
。。。。
Default:
语句;
Break;
}
2.9迭代语句
- While
While(条件){
}
- do....while
先执行语句,再判断条件
do{
}while(条件)
※语句会至少执行一次。
- For
①知道循环次数
For(初始值;条件;迭代){
}
②增强for:不需要知道循环次数
场合:集合或者数组
For(数据类型 临时变量:遍历的数组或者集合){
}
2.10 转移语句
Break:终止当前循环
Continue:结束本次循环,循环会继续
Return:用于方法的返回值,之后的语句不再执行
2.11数组
一维数组: 举例 int a[]
特点:引用类型,存放同种数据类型的数据,地址连续
索引:0~数组.length-1
获取某个元素:数组名【索引】
初始化:静态初始化 int a[]={};
Int a[]=new int[]{};//不指定长度
动态初始化:开辟空间,设定数组的长度
Int a[]=new int[数组的长度];
二维数组: a[][]
必须指定一维数组的长度
2.12常见的工具类
Scanner 类:控制台输入类
接收整数:nextInt();
接收字符串:nextLine()与next()
Random:获取随机数
NextInt(100)====》【0,100)
Math
2.13冒泡排序
原理:两两比较,进行交换
6 3 8 2 9 1
0 第一趟: 3 6 2 8 1 9
1第二趟: 3 2 6 1 8 9 (8与9没必要再比较)少比较1次
2 第三趟: 2 3 1 6 8 9 (少比较2次)
第四趟: 2 1 3 6 8 9 (少比较3次)
第五趟: 1 2 3 6 8 9
规律:比较6个数,最多5次能完成排序
2.14 字符串
三、面向对象
面向对象的思想:
对待问题,考虑这个问题包含多少对象,对象与对象之间的关系是什么。每一个对象需要完成的动作是什么?
面向过程思想:讲究过程处理,所有的动作必须按照步骤来执行,①--》②--③
举例:①手工榨橙汁:超市买橙子——》手工剥皮--》榨汁机---》新鲜的橙汁
过程处理:必须完成第一步,才能执行第2步======》面向过程
②自动榨橙汁:用户投硬币--》新鲜橙汁
两个对象之间的关系:用户,自动榨汁机
动作:用户投硬币
机器给用户生成一杯新鲜的橙汁
把大象装进冰箱分几步
3.1三大特性
封装、继承、多态
3.2类与对象
类:一个模板,对象是类的具体实例
1.类:属性与方法
属性:成员变量---》类的特征
方法:具体行为
引用类型
2.对象
①Rectangle rect1 = new Rectangle();
②Rectangle rect2;
rect2 = new Rectangle();
③Rectangle rect3 = null;//null是指没有引用地址
rect3 = new Rectangle();
3.构造方法
① 特殊的方法:方法名与类名相同
②没有返回类型
③ 初始化类的内部状态
④ 每一个类都有一个默认的无参构造方法,一旦定义其他构造方法,无参将被覆盖。如需使用,重新新建一个无参构造方法
- this关键字:代表当前类,为了解决命名冲突问题
- 方法
方法的声明与实现({})两部分组成。
先创建对象---》对象名.方法名
- 参数传递
①值传递:参数类型是基本数据类型,不会改变参数的结果
②引用传递:参数类型是引用类型,最终会改变结果值
特殊:字符串传递是值传递
String str=“abc”;
String str1=“abc”;
Str == str1//比较的地址-----》true
Str.equals(str1);//字符串的内容-----》true
3.3重载
同一类:方法名相同,参数(个数,类型,顺序)不同===》重载:overLoad
注:返回类型不影响重载
重载是同一类中多态的体现
3.4访问修饰符
3.5 static
之前讲的内容:实例相关
|
|
|
通过在属性和方法前加static修饰符-------》类相关
|
||||||||||||
|
||||||||||||
|
||||||||||||
四:类之间的关系
4.1继承
extends 单继承
子类:可以使用父类的属性和方法
构造方法执行顺序:父类---》子类
4.2 重写Override
定义:父类中的方法无法满足子类的要求,子类对这些方法进行改造。
注:可以采用快捷方式:自动生成注解,对方法体进行改造
手动:匹配重写规则
1. 方法签名与父类一致
2. 重写的方法的返回值必须和被重写的方法的返回一致或者是其子类
3. 重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
4. 私有方法不能被重写
5. 访问权要不一致,要不变的更公开
区别:
重载 |
重写 |
同一类中多态的体现 |
不同类中多态的体现 |
定义:同一类中,方法名相同,参数个数、类型、顺序不同 |
定义:父类中方法,不能满足子类的要求。子类对此方法进行改造。 ※:方法名相同,参数个数、顺序、类型也是必须是一样 |
返回类型不影响重载 |
重写方法的返回类型与父类一致或者是其子类 |
|
父类中方法需要抛出异常,子类必定抛异常 。。。。。。。。。。 |
同一类:方法名相同,参数(个数,类型,顺序)不同===》重载:overLoad
注:返回类型不影响重载
重载是同一类中多态的体现
多态:有继承有关系的类
重写
向上转型 父类引用---》子类
4.3 Object类
Equals与===
- ==一般比较基本数据类型或者引用地址
- Equals比较对象里面的内容是否一致
Clone:生成副本
toString():类信息@哈希码
五、抽象类、接口
5.1抽象类
模板设计
关键字:abstract ,可以修饰类,也可以修饰方法
抽象类:可以包含抽象方法,也可以包含已经实现的方法
抽象类的子类依然可以是抽象类
实现类 extends 抽象类
抽象类不能分配具体的空间,也就是不能直接实例化
抽象类 实例名===new 具体的实现类();
模拟的多态
5.2接口
模拟多继承
行为规范 关键字interface 类implements接口1,接口2
接口:①常量 public static final 数据类型 常量名=初始化
②n个方法的声明(默认是抽象方法)
接口 实例名=new 具体的实现类();
N个类 同一行为---》接口(大部分)
N个类 同一模板 ---》抽象类
5.3其他
内部类:类中定义
同级类:公有类是并列关系
一个Java文件中可能包含N个类,但是只有一个公有类
六、异常
理论:Error:错误(内存溢出,栈异常)
Exception:
编程:检查型异常:编译器会自动提示异常
非检查异常:RuntimeException,编译器不会检查
Try{
有可能发生异常的代码
}catch(异常对象){
}finally{
最后总要执行的点
}
Throws:声明异常,方法名后面使用
Throw:方法体内,手动抛出异常
七、集合
7.1 List集合
特点:有序,元素可以重复
常用的实现类:ArrayList :适合做查询
LinkedList: 适合做修改
导入的包:Java.util
7.2Set集合
特点:无序,元素不可以重复
常见的实现类:HashSet
TreeSet(默认升序)
遍历只能用增强for
导入的包:Java.util
7.3Map集合
维护键值对,key必须唯一,可以为null,但是value可以重复
常见的实现类:HashMap
TreeMap(默认升序)
Map存放或者修改元素:Put(key,value)
7.4迭代器
八、JDBC
准备工作:1.数据库hygdb,表t_user
2.mysql-connector-java-5.1.18-bin.jar 驱动包
- 先创建一个Java工程 JavaSE_JDBC
1.java链接数据库6个步骤
PreparedStatement
PreparedStatement:SQL传递参数选用这个
优势:防止SQL注入;预编译SQL语句,执行效率快;可操作性强;
九、Servlet
所有servlet继承父类HttpServlet,servlet2.5版本后,自动生成注解的方式
9.1 生命周期
初始化(1次)init------》运行期(N次)service-------》销毁期(1次)destory
9.2 访问servlet两种方式
1.注解
2.配置文件
9.3登录功能
需求:1.用户名和密码正确,登录---》首页
- 用户名和密码不匹配,登录返回错误信息
实现过程:
先通过页面级别的JS验证----》servlet----》dao---》db
时序图:
代码逻辑架构
- 执行js验证
按钮添加了单击事件(onclick)-----》checkData()
<input type="button" value="登录" onClick="checkData()"/> |
<script>内加js函数
function checkData(){ alert("执行脚本"); //获取文本输入的内容,通过Id var userId = document.getElementById("userId").value; alert("userId="+userId); if(userId == "" || userId == null || userId==undefined){ alert("用户名不能为空"); return; } //获取密码的值 var pwdId = document.getElementById("pwdId").value; if(pwdId == "" || pwdId == null || pwdId==undefined){ alert("密码不能为空"); return; } document.forms[0].submit(); } |
- Jsp 中form表单注意事项
提交方式:post
文本框加name属性
- Servlet
接收jsp传递的数据 request.getParammeter(“name属性”)
去dao层验证用户名和密码是否存在
成功:请求转发到首页
失败:登录显示错误信息,用EL表达式
9.4 列表功能
点击Index.jsp 菜单-----》servlet---》list.jsp
List.jsp 遍历集合的数据,需要加jstl.jar
- 加taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>