JAVAOOP总结

本文详细介绍了Java面向对象编程的关键概念,包括对象和封装(如类、方法重载、static关键字和final修饰符),继承(如is-a关系、重写和super关键字)、多态(实现方式和优势)、接口(特性与实现)以及异常处理、集合框架、多线程和文件I/O的基础知识。通过对这些概念的理解和应用,开发者能够更好地掌握Java编程的精髓。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.对象和封装

1.类是对象的类型,对象是类的实例
2.方法重载
在一个类中定义多个方法名相同但是参数列表和返回值不同的方法
3.static关键字
static修饰符可以用来修饰属性、方法和代码块
用static修饰的成员不再属于对象,而属于整个类
适用于团体属性
static关键字修饰的属性允许通过对象调用,并且允许通过对象修改
在给方法添加静态关键字static时,该方法调用的变量必须全部为静态变量
在非静态方法总允许调用静态属性,反之不允许
final 代表常量

static、非private修饰非static、private修饰
属性类属性、类变量实例属性、实例变量
方法类方法实例方法
调用方式类名.属性 类名.方法() 对象.属性 对象.方法()对象.属性 对象.方法()
归属单个对象

4.封装

  • 什么是?
    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
  • 如何实现?
    1)修改类的属性可见性,设为private私有的
    2)创建公有的get与set方法,用于属性的读写
    3)在get或set方法中加入控制语句,对属性值进行合法性的判断
  • 好处?
    1)隐藏类的实现细节,调用都不需要知道具体是怎么实现的。
    2)只能通过规定的方法访问数据,实现数据的安全性。
    3)方便在提供的方法内加入控制语句。
    4)方便修改实现。修改实现在内部修改,跟调用都无关。
二.继承

1.继承
1)符号is-a关系
2)使用extends关键字
3)代码复用
4)多重继承关系初始化顺序

父类属性 >父类构造方法 >子类属性 >子类构造方法

5)不能继承的父类成员
在这里插入图片描述
2.重写
1)方法名相同
2)参数列表相同
3)返回值类型相同或者是其子类
4)访问权限不能严于父类
3.super关键字
1)super关键字用来访问父类的成员
2)super只能出现在子类的方法和构造方法中
3)super调用构造方法时,只能是第一句
4)super不能访问子类的private成员
4.访问修饰符

访问修饰符本类同包子类其他
private
默认(friendly)
protected
public

5.抽象类和抽象方法
1)抽象类不能被实例化
2)抽象类可以有0~多个抽象方法
3)非抽象子类必须重写父类的所有抽象方法
4)抽象方法没有方法体
5)抽象方法必须在抽象类里
6)抽象方法必须在子类中被实现,除非子类是抽象类
6.final修饰符
1)修饰的类,不能再被继承
2)修饰的方法,不能被子类重写
3)修饰的变量将变成常量,只能在初始化时进行赋值

三.多态
  • 什么是?
    同一个引用类型,使用不同的实例而执行不同操作
    1)同过父类创建多种类型的子类对象
    2)子类实现父类的抽象方法
    3)通过父类对象调用子类方法
    4)多态中最终执行功能的是子类
  • 优点
    1)减少类中代码量
    2)提高代码的可扩展性和可维护性
  • 实现多态几种方式?
    1)使用多态实现思路(实现多态的三个要素)
    编写具有继承关系的父类和子类
    子类重写父类方法
    使用父类的引用指向子类的对象
    2)实现多态的两种形式
    使用父类作为方法形参实现多态
    使用父类作为方法返回值实现多态
    3)向上转型——子类转换为父类,自动进行类型转换
    向下转型——父类转换为子类,结合instanceof运算符进行强制类型转换
四.接口

一个类只能继承一个父类但可以实现多个接口

  • 特性
    1)接口不可以被实例化
    2)实现类必须实现接口的所有方法
    3)实现类可以实现多个接口
    4)接口中的变量都是静态常量
    【属性全都是全局静态常量】
    【方法全都是全局抽象方法】
    【无构造方法】
  • 编码实现
//编写接口
public interface UsbInterface {
    void service();
}
//实现接口(多个接口使用“,”隔开)
public class UDisk implements UsbInterface {
    public void service() {
        System.out.println("123");
    }
}
//使用接口
UsbInterface uDisk = new UDisk();
uDisk.service();
五.异常
  • 什么是?
    异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
  • 如何进行异常处理
    Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
    1)try:执行可能产生异常的代码
    2)catch:捕获异常
    3)finally:无论是否发生异常,代码总能执行
    4)throws:声明方法可能要抛出的各种异常
    5)throw:手动抛出异常
try {
     // 代码段 1
     // 产生异常的代码段 2
} catch (异常类型 ex) {
     // 对异常进行处理的代码段3
     return;
}finally{
      // 代码段 4
}
}
public class Test {
	public static void divide() throws Exception {//声明异常,多个异常用逗号隔开
		  //可能出现异常的代码
	}
	public static void main(String[] args) {
		 try {
			divide();
		 } catch (Exception e) {
			e.printStackTrace();
		 }
	}
//	public static void main(String[] args) throws Exception {
//		 divide();
//	}
}
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(“性别必须是\"男\"或者\"女\"!");
		}
	}
}
  • 常见异常类型
异常类型说明
Exception异常层次结构的父类
ArithmeticException算数错误情形,如以零做除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问null对象成员
ClassNotFoundException不能加载所需的类
IIIegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,输入类型不匹配
六.集合框架
  • 集合框架内容
    在这里插入图片描述
    1)Collection 接口存储一组不唯一,无序的对象
    2)List 接口存储一组不唯一,有序(插入顺序)的对象
    3)Set 接口存储一组唯一,无序的对象
    4)Map接口存储一组键值对象,提供key到value的映射
  • List接口的实现类
    1)ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
    在这里插入图片描述
List dogs = new ArrayList();
dogs.add(ououDog);
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(2, feifeiDog);           // 添加feifeiDog到指定位置		
System.out.println("共计有" + dogs.size() + "条狗狗。");
System.out.println("分别是:");
for (int i = 0; i < dogs.size(); i++) {
	Dog dog = (Dog) dogs.get(i);
	… …
}

List接口常用方法

方法名说明
boolean add(Object o)在列表的末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o)在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size()返回列表中的元素个数
Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o)判断列表中是否存在指定元素
boolean remove(Object o)从列表中删除元素
Object remove(int index)从列表中删除指定位置元素,起始索引位置从0开始

2)LinkedList采用链表存储方式。插入、删除元素时效率比较高
在这里插入图片描述

 LinkedList dogs = new LinkedList();
 dogs.add(ououDog);
 dogs.add(yayaDog);
 dogs.addLast(meimeiDog);
 dogs.addFirst(feifeiDog);
		
 Dog dogFirst= (Dog)dogs.getFirst();
 System.out.println("第一条狗狗昵称是"+dogFirst.getName() );
		
 Dog dogLast= (Dog)dogs.getLast();
 System.out.println("最后一条狗狗昵称是"+dogLast.getName());
				
 dogs.removeFirst();
 dogs.removeLast();		

LinkedList的特殊方法

方法名说明
void addFirst(Object o)在列表的首部添加元素
void addLast(Object o)在列表的末尾添加元素
Object getFirst()返回列表中的第一个元素
Object getLast()返回列表中的最后一个元素
Object removeFirst()删除并返回列表中的第一个元素
Object removeLast()删除并返回列表中的最后一个元素
  • Map接口
 Map countries = new HashMap();
 countries.put("CN", "中华人民共和国");
 countries.put("RU", "俄罗斯联邦");
 countries.put("FR", "法兰西共和国");
 countries.put("US", "美利坚合众国");
  		
 String country = (String) countries.get("CN");
 … …
		
 System.out.println("Map中共有"+countries.size() +"组数据");
 		
 countries.remove("FR");
 System.out.println("Map中包含FR的key吗?" + 
				countries.containsKey("FR"));
		
 System.out.println( countries.keySet() ) ;
 System.out.println( countries.values() );
 System.out.println( countries );

Map接口常用方法

方法名说明
Object put(Object key, Object val)以“键-值对”的方式进行存储
Object get (Object key)根据键返回相关联的值,如果不存在指定的键,返回null
Object remove (Object key)删除由指定的键映射的“键-值对”
int size()返回元素个数
Set keySet ()返回键的集合
Collection values ()返回值的集合
boolean containsKey (Object key)如果存在由指定的键映射的“键-值对”,返回true
七.多线程
  • 什么是?
    1)如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”
    2)多个线程交替占用CPU资源,而非真正的并行执行
  • 好处
    1)充分利用CPU的资源
    2)简化编程模型
    3)带来良好的用户体验
  • 创建线程的方式
    1)继承Thread类
    编写简单,可直接操作线程
    适用于单继承
    2)实现Runnable接口
    避免单继承局限性
    便于共享资源
  • 线程的状态
    在这里插入图片描述
  • 线程安全的类型
方法是否同步效率比较适合场景
线程安全多线程并发共享资源
非线程安全单线程
  • 总结
    在这里插入图片描述
八.File I/O
  • 文件
File file = new File( String pathname );

File类常