java 面向对象编程(5)

1.引用类型转换(掌握)
基本数据数据类型转换:自动转换(byte/short/char---->int---->long—>float---->double)
强制转换 (类型字节小的)字节大 int x=256; byte b=(byte)x
引用类型转换:向上造型(上塑造性):自动转换 子类转父类
特点:损失子类新扩展的属性和方法
向下造型(下塑造性):强制转换 父类转子类
特点:必须先经过向上造型才可向下造型,否则运行时异常ClassCastException:类转换异常

instanceof关键字:判断某个对象是某个类的实例 ,表达式结果为true 、false
对象 instanceof 类名

Person p=new Student();
boolean b=p instanceof Student //true

Person p1=new Person();
boolean b1=p1 instanceof Student //false

2.多态(掌握)
多态:同一消息响应不同的结果。消息可理解成方法,对象
多态体现:重载,重写
侧重:父类引用指向子类对象(向上造型)
三要素:
继承关系,方法的重写,父类引用指向子类对象
简言之:同一个方法,不同对象执行结果不同;
同一个方法,传入的实参不同结果不同
意义:使java可扩展,”适应未来“

3.内部类(了解)
定义在class中类成为内部类。
(1)普通内部类
class A{
class B{
}
}
//A为外部类,B为内部类
创建A对象
A a=new A()
创建B对象
A.B b=a.new B()

(2)静态内部类
class A{
static class B{
}
}

 //创建内部类B对象
   A.B  b=new A.B()

(3)局部内部类:在方法体或者代码块中定义的类

 class  A{
    void method(){
	    class B{ //局部内部类
	           }
	    new B();
	}
	
	{
	   class C{//局部内部类
	           }
	}
   }

只有调用方法才能加载内部类
  
 A  a=new A();
 a.method();

(4)匿名内部类
一般用于接口和抽象类的使用

 abstract  class A{
    abstract void f();
 }
 
 Interface B{
    void f2();
 }
 
 Test{
    public static void main(String args[]){
	 A a= new A(){ //匿名内部类
	      void f(){}
	   };
	 B b=new B(){//匿名内部类
	      void f2(){}
	 };   
	}
 }
 
lamda表达式、 lamda语法:简化匿名内部类的
 (参数名)->{方法体}
 前提:接口或抽象类中的抽象方法唯一
 Test{
    public static void main(String args[]){
	 A a=()->{System.out.print("hello")};
	 a.f();
	 B b=()->{System.out.print("hello")};
	 b.f2()
	}
 }

4.异常简介Exception
定义:运行期间发生的错误,而不是编译期间的语法错误。
常见异常:
数组下标越界异常 ArrayIndexOutOfBoundsException:访问不存在的下标对应的元素
类转换异常classCastException(直接下塑造性)
算术异常ArithmeticException 除0
输入异常InputMismatchException
空指针异常 NullPointerException 引用指向null,使用引用调用方法或属性时

(1)多个catch捕获异常按照顺序执行,catch捕获语句块只能匹配一次
(2)前面的catch中异常类型不能是后面异常的父类
(3)try{代码块}不能独立书写
结构
try{}
catch(异常类型1 参数名){}
catch(异常类型2 参数名){}
。。。
catch(异常类型n 参数名){}

  try{}
  finally{
     一定能够执行
  }
  
  try{}
  catch(异常类型1 参数名){}
  catch(异常类型2 参数名){}
  。。。
  catch(异常类型n 参数名){}
  finally{}
  
 finally用于异常处理中,进行释放资源,特点是不论异常是否发生都能够运行。
 
 
(4)异常类的常用两个方法
     String getMessage()获取异常信息	
     void printStackTrace()打印堆栈信息

7.throws与throw
抛出异常:回避异常
throws用于方法上回避异常,由调用该方法的函数进行处理异常

 static void tt() throws NullPointerException,ArrayIndexOutOfBoundsException,IOException{
	System.out.println("方法体有很多代码,很复杂");
	
}

throw抛出异常 直接创建一个异常
  throw  new Exception();

8.自定义异常类
class 自定义类名 extends Exception{含参构造器}

public class MyException  extends Exception {
	public MyException(String msg){
		super(msg);
	}
}  	
static void speek() throws MyException{
	//需求:谁说脏话停止运行   ***
	while(true){
		System.out.println("请发表意见:");
		Scanner sc=new Scanner(System.in);
		String words=sc.next();
		if(words.equals("***")){
			throw new MyException("不可说脏话");
		}
	}
}

public static void main(String[] args){
  try{
	  speek();
  }catch(MyException my){
	  System.err.println(my.getMessage());
  }
	System.out.println("-----------");
}
发布了21 篇原创文章 · 获赞 11 · 访问量 338

猜你喜欢

转载自blog.csdn.net/weixin_41050494/article/details/103918463