@TOC
问题:什么是tomcat?
bash zsh
source之后终端重新开一下
java跨平台原理
/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
运行helloworld
基础语法
关键字
全部小写
并且id会有特殊颜色标记
常量
空常量是不能输出的!为什么在后面
定义变量需要初始化
定义变量不能重复使
用
long i = 100000000L
防止定义long类型整数太大
定义f
loat 要使用
float f = 13.14F
默认是double
名字不能重复
变量未定义不能使用
要添加L 跟F
/得到商
%得到余数
整数相除只能得到整数 要想得到小数必须有浮点数参与
‘0’ --48
‘A’–65
‘a’–97
来源
字符串+操作是拼接
1 + 99 +“黑马”= 100黑马
字符是底层的加法运算
数据输入
switch
case穿透
数据读取以及随机数
项目 -模块 -包 -类
以int和Integer为例:
java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false。
当用“==”进行比较时,jvm默认是比较数据在java堆的地址。
引用
引用
类名字大驼峰
方法名字小驼峰
方法不能嵌套
只关注名字跟参数
force step into 会进入官方方法
for 可以定义两个变量
修饰符
包就是文件夹 就
是为了对类进行管理
权限修饰符
private
默认
protected
public
一个类包含方法跟变量
java静态变量是表示所有对象共享建议通过类名来访问
b | 静态 | 动态 |
---|---|---|
方法 | 左边 | 右边 |
变量 | 左边 | 左边 |
复写的方法也看右边
原话叫做静态成员方法只能访问静态成员
接口:
成员变量:
1.只能是常量
2.默认修饰符 public static final
构造方法:
1.接口没有构造方法,一个类如果没有父类默认继承object
成员方法
只能是抽象方法
默认修饰符public abstract
接口中方法在jdk89有些新特性后面再讲
抽象类多态接口多态
cat中什么都有所以用Cat作为父类变量最好了
类跟接口关系 3种关系
类和类的关系
继承关系,只能单继承,但是可以多层继承
类和接口的关系
实现关系,可以单实现,也可以多实现,还可以继承一个类的时候实现多个接口
接口和接口的关系
继承关系,可以单继承也可以多继承
设计理念
抽象类 对类抽象,包括属性,行为
接口 对行为抽象,主要是行为
报警门
开门关门在类中,报警在接口中
案例
运动员教练 乒乓球出国学英语 学英语肯定是接口
形参和返回值:
方法的形参如果作为类名,返回的是该类的对象,方法的返回值如果是类名返回的是该类的对象
如果是抽象的类?用多态形式
方法的形参是抽象类名,其实需要的是该抽象类的子类对象
方法的返回值是抽象类名其实返回的是该抽象类的子类对象
接口作为形参
方法的形参是接口,其实需要的是该接口的子类对象
方法的返回值是接口其实返回的是该接口的子类对象
内部类
成员内部类
局部内部类
匿名内部类(本质是一个继承抽象类或者实现接口的的子类匿名对象 所以那个格式就是有()的前面是用new的)
开了一个子类,但子类新方法不能用,重写的才可以用,这就是向上转型,向下转型也不是所有都可以,只有向上转型了的才可以再转回来
int转String
public satic String valueOf(int i) 是String类中的方法
String 转int
public static int parseInt(String s). 该方法是Integer类中的方法
装箱:把基本数据类型转为对应的包装类类型
Integer i = Integer.valueOf(100);
Integer i = 100;
拆箱:把包装类类型转为对应的基本数据类型
Integer ii = 100;
ii+=100;//自动拆箱又装箱
ii = ii.intvalue()+200;//手动拆箱
Integer ii = null;
ii += 200;//就会报错
//在开发的时候如果是一个引用类型的变量,在使用的时候要先做不为null的判断
if(ii!=null){
ii+=200;
SimpleDateFormat
1.格式化(从date 到String)
public final String format(Date date):
2.解析(从String 到Date)
public Date parse(String source)
蓝色矩形是接口 红色的是实现类
new …这里是一个构造方法,变量是一错误的message 在后面 e的三个方法中getmessage会获得返回值
e3个方法只要知道一个
就够了
运行异常无需显示处理,比如错了就回来改一下index
也可以显示处理跟编译异常一样 用try catch处理
try catch 可以对异常处理 但有时候没有权限进行处理该怎么办
抛出异常是在定义方法的后面
直接给我跑到main方法后面了
没有throws就算写对了也无法编译
有了throws 该错还是报错
自定义异常
输入学生成绩超过100 或者小于0
这种异常要自己写
一个异常流程
0.系统或者自定义 系统的话直接看3,4 自定义看1
1.定义一个继承自1.run异常或者2.编译异常
2.在方法中throw跑出异常,如果继承自1.1 则看3 如果1.2 则看4
3.运行异常 不一定需要处理 可以在方法外写throws 也可以不用 或者try catch
4.编译异常必须处理。 在方法外写 或者try catch
自定义异常带参构造
super(s) 而不是super.nessage = s
super()这是父类的构造方法 多简单
新对象需要用new!!!
所有含有编译异常的方法都有throws显示
但是throw不是都看得 可能在某个方法里嵌套调用
运行异常自定义:定义异常类 方法中跑出异常对象
1.直接不管2.try 3 throws
运行异常系统 不用自己写方法了
- 不管2try3throws
编译异常自定义 定义异常类 方法中跑出
1.try 2 throws
编译异常系统 不用自己派出
1.try 2 throws
不用被递归throw吓到
throw肯定是在某个方法里抛出来的 在那里跑出 哪里就是最底层了
list集合有两种方式便利
一种是迭代器
一种是因为list带索引!
并发修改异常
并发修改异常 next方法中 判断修改值引发的
用for get 就不会有异常
并发修改异常全解
列表迭代器常用方向 可以任意方向
列表迭代器有add方法
之前并发异常是迭代器迭代,集合添加
现在是列表迭代器迭代,迭代器添加
原因是add方法里面有个赋值给修改值
增强for循环目的 简化数组和collection集合的遍历
内部原理是一个迭代器 是一个普通迭代器!!
重地跟通话hashcode一样
什么是哈希值
linkedHash 优点
所有基本类型 存储的时候 用的是它的包装类类型
treeset
上面是treeset 自然排序。自然排序就是Student类自己实现comparable接口重写compareto方法