2021年7月29日
讲师:王博
复习:
类的声明
class 类名{
成员属性;//特征 变量
成员方法;//行为
}
对象的实例化
类名 对象 = new 类名();
构造方法
构造方法决定你实例化对象的形式
构造方法真正的目的是对成员属性进行赋值
封装
对属性进行封装
1.写成员变量的时候加修饰符 private
2.需要写set get方法
3.如果想要赋值,通过set方法 想要取值,通过get方法
继承
class B extends A{}
- 继承是可以把属性和方法从父类中继承过来的(非私有化)
- 子类可以重写父类的方法
多态
父类的引用指向子类的对象
Father father = new Son();
抽象类
abstrace 类名{
抽象方法
非抽象方法
}
接口
interface 接口名{
抽象方法;
}
今日内容:
·static关键字
·异常
·String
1static关键字【重点】
static字面意思:静态
static修饰的东西和对象无关
1.1生活的静态的东西
饮水机:
1公开的资源
2和你们(对象)没有关系
3共大家使用的
为什么使用静态的东西?
每人发一个饮水机,开心。
1.2static修饰成员变量
static int age;
注意事项
1使用static修饰变量的时候,只需要记住一种调用方式
类名.属性名字;
2代码中没有创建任何类对象的时候,static修饰的成员变量已经被加载
3分析内存:只有是static修饰的成员变量,都是在.class【字节码文件】文件,编译阶段,就直接加载到了内存的数据区。该过程是早于对象创建的,整个数据区静态的成员属性是伴随着整个程序的结束而结束
4保存区域
类对象 堆区。静态的成员属性保存在数据区
1.3static修饰成员方法
声明方式:
一个正常的方法前面写static
public void eat(){}
publc static void eat(){}
这个就是静态方法
静态方法的调用方式
类名.方法名();
【注意事项】
1静态的成员方法可以摆脱对象束缚,直接通过类名可以调用
2内存分析:静态的成员方法随着.class文件的加载而加载。会被加载到方法区。这个时候方法的创建要早于对象的创建。
3静态的成员方法中,能不能使用非静态的成员属性和成员方法?
不能,因为静态的方法要早于对象的创建,非静态的属性和方法是对象创建的时候才调用的
4静态方法不能被重写
5静态方法中能不能创建对象?可以创建
package com.liujinghe.b_staticmechod;
class SingleDog{
//成员属性
String name;
int age;
static int test = 20;//静态的成员属性
public void eat(){
System.out.println("单身狗,吃狗粮");
}
//静态方法
public static void testStaticMethod(){
System.out.println("静态的成员方法");
}
}
class XiaoMing extends SingleDog{
// @Override//重写的严格限制,这个报错,证明不是重写的,是子类独有的
// public static void testStaticMethod(){
// System.out.println("我是子类的静态方法");
// }
}
public class Demo {
public static void main(String[] args) {
SingleDog.testStaticMethod();
SingleDog singleDog = new SingleDog();
}
}
1.4static可以修饰代码块【静态代码块】【重点】
语法格式
static {
代码;
}
类文件只有加载,静态代码块一定加载
静态代码块也是优于对象的创建
目的:为了在实例化对象之前,做一些准备工作
执行顺序:静态代码块 》构造代码块 》构造方法
2异常【重要】
2.1什么是异常
生活中异常
你:医生,我难受
医生:哪里难受
你:头疼
医生:为什么头疼
你:可能是昨天敲一夜代码
医生:还有什么症状吗
你:还有嗓子不舒服
医生:回家喝点烫水就好了
错误和异常 都是有前因和后果
java代码中异常:
运行时候的异常:
ArrayIndexOutOfBoundsException:数组下标越界的异常
NullPointerException:空指针异常
ClassNotFoundException:找不到该类
SQLException:sql语句异常
FileNotFoundException:文件找不到异常
num1/num2
2.2Throwable【不常用】
Throwable是java中处理异常和错误的类
两个直接子类
error:错误,只能避免,无法处理,用java是没有办法解决的,所以不学
exception:异常,是能够使用java代码处理的。要学
构造方法:
Throwable();无参数构造方法,异常信息时null
Throwable(String message);创建一个Throwable对象,异常信息为message
方法:
String getMessage();获取异常信息的字符串
String toString();获取当前异常信息描述的字符串
void printTrace();展示异常和错误的前因后果
package com.liujinghe.d_throwable;
public class Demo {
public static void main(String[] args) {
Throwable throwable = new Throwable("一个异常");
System.out.println(throwable.getMessage());
System.out.println(throwable.toString());
throwable.printStackTrace();
}
}
2.3模拟写异常
package com.liujinghe.d_throwable;
import java.util.Arrays;
public class Demo2 {
public static void main(String[] args) {
test(1,0,new int[5]);
//java.lang.ArithmeticException: / by zero
}
public static void test(int num1,int num2,int [] arr){
int ret = 0;
// ret = num1/num2;
System.out.println(ret);
//java.lang.ArrayIndexOutOfBoundsException: 7
arr[7]=33;//超出索引
System.out.println(Arrays.toString(arr));
}
}
2.4异常的解决方案
两种方案:
1捕捉:
2抛出:
2.4.1捕捉异常【重点】
语法格式:
try-catch
try-catch-finally
1.try{
有可能出现的异常
}catch(异常对象){
针对于当前异常进行处理的方案
}
2.try{
有可能出现的异常
}catch(异常对象1){
针对于当前异常进行处理的方案
}catch(异常对象2){
真的当前
}
package com.liujinghe.e_throwable;
import java.util.Arrays;
public class Demo3 {
public static void main(String[] args) {
test(1,4,new int[3]);
}
public static void test(int num1,int num2,int [] arr){
int ret=0;
try{
//有可能出现异常的代码
ret=num1/num2;
arr[6]=78;//代码之前如果出现异常就不会往下执行了
}catch(Exception e){
System.out.println(e.getMessage());
System.out.println(e.toString());
e.printStackTrace();
}
System.out.println(ret);
System.out.println(Arrays.toString(arr));
}
}
3try{
}catch(){
}finally{
无论出没出现异常都要执行的代码
}
package com.liujinghe.e_throwable;
public class Demo4 {
public static void main(String[] args) {
test(4,0);
}
public static void test(int num1,int num2){
int ret=0;
try{
ret=num1/num2;
}catch (Exception e){
System.out.println(e.getMessage());
System.out.println(e.toString());
}finally {
System.out.println("这个是不管出没出异常,我都会执行");
}
System.out.println(ret);
}
}
2.4.2抛出异常
throw throws
throw:用在方法中抛出异常的对象
throws:用在方法的声明位置,告诉调用者,当前抛出的异常有哪些
package com.liujinghe.e_throwable;
public class Demo6 {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(-3000);
}
}
2.4.3自定义异常
java给咱们提供了很多的异常类对象,但是有的时候却满足不了咱们生活中的异常信息,生活中有些逻辑异常,无法使用java给咱们提供的异常类对象
例如:
你是一个优质的单身人士;
买东西没钱
上网没网钱
吃饭没有碗
喝水没有被子
睡觉没有床
自定义异常 :
自己建一个类,去继承Exception
package com.liujinghe.e_throwable;
class SinglePerson extends Exception{
public SinglePerson() {
}
public SinglePerson(String message) {
super(message);
}
}
public class Demo7 {
public static void main(String[] args) {
try {
buyOneFreeOne(true);
} catch (SinglePerson singlePerson) {
System.out.println(singlePerson.getMessage());
System.out.println(singlePerson.toString());
}
}
public static void buyOneFreeOne(boolean isSingleDog) throws SinglePerson {
if(isSingleDog){
throw new SinglePerson("单身狗不能进店");
}
System.out.println("情侣买一送一");
}
}
3String类
想学一个类,需要注意哪些点?
1打开官方手册
2搜索String
3看这个类的关系,继承谁?子类是谁?
4看这个类的构造方法
5看这个类下面重要的方法
6这些方法注意三点:方法的功能 方法的参数 方法的返回值
处理字符串的类
3.1判断两个字符串是否相等
==;判断的是内容和地址
equals方法;判断的是内容
开发中比较字符串的时候一定要用equals
package com.liujinghe.f_string;
public class Demo2 {
public static void main(String[] args) {
String str1 = "烤羊排";
String str2 = "烤羊排";
//第二种声明方式
String str3 = new String("烤羊排");
String str4 = new String("烤羊排");
/**
* == 不但比较内容,也比较地址
* str1 == str2 栈区存放
* str1 == str3 str1在栈区,str3在堆区
* str3 == str4 都在栈区,内存地址不一样
*/
System.out.println(str1 == str2);
System.out.println(str1 == str3);
System.out.println(str3 == str4);
//开发中不能使用==来判断两个字符串是否相等
//使用equals方法
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));
System.out.println(str3.equals(str4));
}
}
作业
1今日代码至少三次
2每人写一遍关于static的博客
3String类下面的方法(如果不会可以百度)
length
charAt
indexOf
lastIndexOf
endswith
isEmpty
contains
equalsIgnoreCase
valueOf
toCharArray
replace
split
subString
toUpper
toLower
trim