java对象

使用面向对象的思想开发程序的好处

1.客户和软件设计开发人员之间、软件设计开发人员内部交流更加顺畅
2.提高软件设计和开发效率

构造函数

作用:大多用于数据的初始化
访问修饰符 构造方法名 ( ) {
//初始化代码
}
方法名与类名相同,可以附带参数

类的封装

概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

好处:
1.隐藏类的实现细节
2.只能通过规定方法访问数据
3.方便修改实现
4.方便加入控制语句

步骤:
在这里插入图片描述

this关键字使用

1.调用属性
this.health = 100;
this.name = “大黄”;

2.调用方法
this.print();

3.调用构造函数(必须在构造函数中使用且必须是第一条语句)
this();
this(“小黑”,100,100,“雄”);

对象的继承

使用关键字extends
例子:

//父类
class Pet { 
        //公共的属性和方法
}
//子类继承父类
class Dog extends Pet { 
        //子类特有的属性和方法
}

注意:子类不会继承父类的构造方法

1.子类访问父类成员

使用super关键字,super代表父类对象

1.1访问父类构造方法
super();
super(name);

1.2访问父类属性
super.name;

1.3访问父类方法
super.print();
super不能访问父类的private成员

2.访问修饰符protected

可以修饰属性和方法
本类、同包、子类可以访问

3.访问修饰符总结

在这里插入图片描述

4.多重继承关系的初始化顺序是怎样的

当new一个子类时,执行顺序如下:
父类属性->父类构造方法->子类属性->子类的构造方法

5.方法重写的规则

1.方法名相同
2.参数列表相同
3.返回值类型相同或者是其子类;
4.访问权限不能严于父类

6.抽象类abstract

1.Java中也使用抽象类,限制实例化
例子:

public abstract class Pet {		
} 

2.abstract也可用于方法——抽象方法
2-1.抽象方法没有方法体
2-2.抽象方法必须在抽象类里
2-3.抽象方法必须在子类中被实现,除非子类是抽象类

7.final用法

1.修饰的类,不能再被继承
2.修饰的方法,不能被子类重写
3.修饰的变量将变成常量,只能在初始化时进行赋值

多态

1.如何实现多态

1.编写父类
2.编写子类,子类重写父类方法
3.运行时,使用父类的类型,子类的对象

Pet pet = new Dog();(自动类型转换)pet可以调用父类Pet与Dog共有的方法,无法调用Dog独有的方法
Dog d=(Dog) pet;(强制类型转换,将pet强制转为Dog类)

instanceof运算符
instanceof通常和强制类型转换结合使用

例子:

public class Master {
	public void play(Pet pet){
               if (pet instanceof Dog) {    //如果传入的是狗狗
	         Dog dog = (Dog) pet;
	         dog.catchingFlyDisc();
	}else if (pet instanceof Penguin) {   //如果传入的是企鹅
	         Penguin pgn = (Penguin) pet;
	         pgn.swimming();
	}
	}
}	

2.实现多态的两种形式

使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态

接口

关键字 interface

public interface MyInterface {
    public void foo()//其他方法
}

注意:里面所有的方法都是公有抽象的方法

接口的特性

1.接口不可以被实例化
2.实现类必须实现接口的所有方法
3.实现类可以实现多个接口
4.接口中的变量都是静态常量

5.无构造方法

例子:

1.编写接口
public interface UsbInterface {
    /**
     * USB接口提供服务。
     */
    void service();
}
2.实现接口
public class UDisk implements UsbInterface {
    public void service() {
        System.out.println("连接USB口,开始传输数据。");
    }
}
3.使用接口
UsbInterface uDisk = new UDisk();
uDisk.service();

面向接口编程

1.关心实现类有何能力,而不关心实现细节
2.面向接口的约定而不考虑接口的具体实现

异常

使用try-catch块捕获异常

public void method(){
try {
      // 代码段(此处不会产生异常)
} catch (异常类型 ex) {
      // 对异常进行处理的代码段
}
// 代码段
}

异常对象常用的方法
1.void printStackTrace()
作用:输出异常的堆栈信息
2.String getMessage()
作用:返回异常信息描述字符串,是printStackTrace()输出信息的一部分

常见的异常类型

异常类型说明
Exception异常层次结构的父类
ArithmeticException算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问 null 对象成员
ClassNotFoundException不能加载所需的类
IllegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,如把"abc"转换成数字

在try-catch块后加入finally块

1.是否发生异常都执行
2.不执行的唯一情况
在这里插入图片描述

存在return的try-catch-finally块

public void method(){
	try {
	     // 代码段 1
	     // 产生异常的代码段 2
	} catch (异常类型 ex) {
	     // 对异常进行处理的代码段3
	     return;
	}finally{
	      // 代码段 4
	}
}

处理过程与此类似
在这里插入图片描述

引发多种类型的异常

1.排列catch 语句的顺序:先子类后父类
2.发生异常时按顺序逐个匹配
3.只执行第一个与异常类型匹配的catch语句

声明异常

声明多个异常用逗号隔开

public static void divide() throws Exception {
	  //可能出现异常的代码
}

抛出异常

除了系统自动抛出异常外,有些问题需要程序员自行抛出异常

public class Person {
	private String name = "";   // 姓名
	private int age = 0;   // 年龄
	private String sex = "男";  // 性别
	public void setSex(String sex) throws Exception {
		if ("男".equals(sex) || "女".equals(sex))
			this.sex = sex;
		else {
			throw new Exception(“性别必须是\"男\"或者\"女\"!");//抛出异常
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值