十三.类和对象(5)static关键字和异常

17.17static关键字【重点】

指静态资源?= 公共的资源

放在方法区,对象可以调用,但和对象无关

对象.name 但不推荐这么写 一般写 类.name

1.用法
  1. 修饰成员变量 静态属性
  2. 修饰成员方法 静态方法
  3. 修饰代码块 静态代码块
package com.qfedu.a_static;

class Man {
	static String name;//静态的属性  和对象无关的
	//静态方法
	public static void eat () {
		System.out.println("吃饭喝酒");
	}
	//静态代码块
	static {
		System.out.println("嘻嘻");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		//咋使用 类.静态的属性
		Man.name = "狗蛋";
		System.out.println(Man.name);
		//使用  类.静态方法名字()
		Man.eat();
		
	}

}
1.1修饰成员变量

格式:

static 数据类型 变量名;

注意:

  1. static修饰的成员变量叫静态变量
  2. static修饰的公共资源当类加载时就会存到方法区,不需要创建对象,所以和对象没关系。
  3. 可以用 对象.静态属性 访问到资源,但要用 类名.静态属性

在这里插入图片描述

1.2修饰成员方法

静态方法

public static 返回值  方法名 (参数列表) {
	方法体;
}

调用:

类.静态方法名( );

普通方法只能通过new对象后使用**对象.方法名( )**调用,静态方法可以直接通过 类.静态方法名( ) 调用

1.3修饰代码块

静态代码块

static {
	语句体;
}

注意:

  1. 一旦类加载静态代码块就一定会执行,不需要new对象

  2. 执行顺序:静态代码块 -->构造代码块 -->构造方法

    构造代码块和构造方法必须new对象才会执行

class Cat {
	public Cat () {
		System.out.println("无参构造方法");
	}
	{
		System.out.println("构造代码块");
	}
	static {
		System.out.println("静态的代码块");
	}
}
public class Demo4 {
	public static void main(String[] args) {
		Cat cat = new Cat();
	}

}
//输出顺序为 静态代码块  构造代码块  无参构造方法

17.18异常【重点】

异常,指不能顺利进行下去,出现的一些意外情况

java中:程序自上而下执行时遇到预期外的事件阻止了代码往下运 行,就叫做异常

java封装有很多异常类,并提供了异常的处理机制

文档: https://www.matools.com/api/java8

1.Throwable类(了解)

包括java中所有错误和异常的类,分为以下两个子类:

错误(error):jvm本身错误,无法通过代码解决,无法使用代码修复的问题(了解)

异常(exception):程序运行过程发生僧的不可预期的事件,数组下标越界,类转换异常等,可以通过java抛出让他继续执行下去

构造方法:

Throwable()构造一个新的可抛出的 null作为其详细信息。
Throwable(String message)构造一个具有指定的详细消息的新的throwable。

方法:

StringgetMessage()返回此throwable的详细消息字符串。
voidprintStackTrace()将此throwable和其追溯打印到标准错误流。
StringtoString()返回此可抛出的简短描述。
public class Demo1 {
	public static void main(String[] args) {
		System.out.println("嘻嘻");
		System.err.println("哈哈");
		Throwable throwable = new Throwable();
		System.out.println(throwable.getMessage());
		Throwable throwable2 = new Throwable("哈哈,我傻逼了");
		System.out.println(throwable2.getMessage());
		/**
		 * java.lang.Throwable: 哈哈,我傻逼了
	at com.qfedu.b_trhowable.Demo1.main(Demo1.java:7)

		 */
		throwable2.printStackTrace();
		//java.lang.Throwable: 哈哈,我傻逼了
		//告知了这个错误信息
		System.out.println(throwable2.toString());
	
2.异常【重点】
1.异常种类
1.1编译时异常

无法通过编译,更别说执行了

​ FileNotFoundException

​ SQLException

​ ClassNotFoundException

​ InterruptException

1.2运行时异常

能够通过编译,但是运行时报错

​ ArrayIndexOutOfBoundException 数组下标越界

​ ClassCastException 类转换异常

​ NullPointerException 空指针异常

2.异常的解决

代码出现异常后,java提供了两种异常的解决方案

异常捕捉 和 异常抛出

2.1异常捕捉

格式:

try {
	可能出现异常的代码
}catch(异常对象){
	//异常的处理方案
}finally {
    语句体
}

​ finally后无论有无异常均执行,可以不用写(效果相同)

执行:

​ 将可能出现异常的代码放入try后,如果没有出现异常,这正常执行try后代码,如果出现异常,则和catch后的异常对象相匹配,相同的话执行相应的异常处理方案。可以有多个catch,利用多态性异常对象可以写exception,不用写多个catch。

package com.qfedu.c_Exception;

public class Demo2 {

	public static void main(String[] args) {
		test(3, 0);
	}
	public static void test (int a, int b) {
		int ret = 0;
		try {
			//有可能个出现异常的代码
			 ret = a / b;
		} catch (ArithmeticException e) {
			System.out.println("123");
			//打印错误信息
			System.out.println(e.getMessage());
		}
		//即使代码有异常,通过捕捉以后。是不会影响程序的接着执行的代码的
		System.out.println(ret);
		System.out.println( 4 + 4);
	}
}

2.2异常抛出

在代码出现异常的地方进行异常抛出

异常抛出后代码会终止

关键字:

​ throw:在方法中抛出一个异常,自己造出来的错

​ throws:写在方法声明处,告知调用者此处有异常,要小心

package com.qfedu.c_Exception;

import java.io.FileNotFoundException;

public class Demo8 {
	public static void main(String[] args) throws Exception{
		test(0);
		Thread.sleep(1000);
	}
	public static void test (int a) throws FileNotFoundException{
		if (a == 0) {
			//编译时异常
			throw new FileNotFoundException();
		}
		System.out.println("jvm xixi");
	}

}

目前暂时会 怎么捕捉异常或抛出异常 就可以

3.自定义异常

java所提供的的异常对象无法满足我们现实生活中的需求,就需要我们自己造一个异常对象

​ 这个异常类要继承Exception

例:如果单身就抛出一个异常 单身异常类

package com.qfedu.c_Exception;

import java.util.Scanner;

public class Demo11 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个整数:");
		int score = scanner.nextInt();
		try {
			test(score);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
	public static void test (int score) throws Exception {
		if (score > 100 || score < 0) {
			throw  new Exception("输入的整数有误的。。。");
		}
		if (score >= 90 && score <= 100) {
			System.out.println("优秀");
		} else if (score >= 80) {
			System.out.println("良好");
		} else if (score >= 70) {
			System.out.println("及格");
		} else {
			System.out.println("叫家长。。。");
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值