笔记之_Java面向对象整理
Posted 莫轩ASL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记之_Java面向对象整理相关的知识,希望对你有一定的参考价值。
现实生活中 先有对象 后有类 在程序中 先定义类 再根据类生成对象 什么是对象 现实中 看得见摸得着的所有实体都称为对象 什么是类 类是一组具有相同特征,相似行为的对象的集合 类是模子,对象是根据模子产生的实例 实例:内存中得以保存 现实:1.找对象2.抽离特征得到类 程序:1.根据现实得到的类创建类文件2.创建类对象 类中直接定义的变量:描述特征 1.变量作用域已到极致(全局变量) 2.成员变量 3.属性 类:相当于一个模板空间 只要有new出现就是实例化对象,强制开辟空间 访问修饰符 a) Public 公共的 受访问级别最高 受保护级别最低 b) default(只能修饰类和成员 且不能明确的写出来) 在当前包中可访问 跨包不能访问 c) private(修饰成员,该修饰符不能修饰类) 私有的 受访问级别最低 保护级别最高 只能被本类的其它成员访问 d) Protected:受保护的,只能在本类和本类的子类中访问 类的成员:类中的属性和方法 程序中:[]代表数组,()代表方法 静态修饰符 Static:静态成员,依赖于类,有唯一性,不能调用于实例对象,调用时使用类名+.直接调用 实例成员:依赖于对象,对象有多少,成员就有多少份,能调用于static声明的静态对象 6. 封装 封装是面向对象三大特征之一(封装 继承 多态) a) 概念:隐藏具体的实现 提供一个对外的用户接口给用户调用 称为封装 b) 封装的优势:确保了数据的准确性(属性),提高的复用性(方法) c) 封装属性的步骤 i. 属性私有化 ii. 为每个属性设置 getter(取值器) 和 setter(赋值器) 类可以看做是对属性和方法的封装 方法:方法是一种封装,封装代码块,提高复用性,降低了耦合度(解耦) main方法中的代码是暴露在外的 构造方法(无参、全参):在一个类中,方法名与类名相同,不带返回值类型的方法 实例化过程是对构造方法的显示调用 类: 测试类 功能类 实体类:属性、封装、构造 方法构成: 访问修饰符 返回值类型:不限制类型,无返回值用void 方法名称 参数列表 方法主体 栈:存对象名及对象地址 堆:存对象 方法池:存类 方法: 定义期:存在形参(形式参数),只有空间没有值,等价于局部变量 使用期:存在实参,为形参赋值,实参数量、类型、顺序须与形参一致,等价于全局变量 实体类:数据的载体,用来承载数据 功能类:包含大量的操作方法 对象数组:存多个Food类型的对象,Food[] food(用来存Food[]地址)=new Food[200](存对象地址);缺省值类型为null 变量依照就近原则 this:指代本类,访问全局变量 常用英文: 增:add、insert 删:remove、delete 改:modify、update 查:find、select 对象数组声明的变量:当前数组中元素个数,下一次添加元素的下标位置 全查询没有参数 本类一个方法调用另一个方法,直接调用 方法重载(overload):在同一类中,有两个或多个方法名称相同,参数类型或个数或顺序不同,提高了方法名的可用性 方法重写(override):在形成继承关系的父子类中,子类拥有的方法和父类中的方法名和参数列表相同,子类的方法覆盖父类的方法称为重写 系统确定方法,看方法名和参数类型和个数和顺序,与返回值类型无关 初始化、重置删除(全删) final修饰属性:此属性就是一个常量,一旦初始化就不可再被赋值,有一次也仅有一次赋值机会 final修饰方法:不能被重写 final修饰类:不能被继承,必然不能是抽象类 无继承不多态 类图:没有内容,留出空间。+代表public,-代表private,#代表protect具有继承的子类用,受保护的,?代表父子类的继承 类名: 属性:名在前,类型在后 方法: 继承:具有传递性、单根性(一个子类只有一个父类) 概念:一个类继承自另一个类,获取被继承类所有属性,以及除构造方法外,所有的方法的过程称为继承 多态:在形成继承关系的父子类中,子类对父类声明的同名方法,采用不同的方式去实现的过程,方法重载也是一种多态 抽象类: 接口(interface):接口关键字是implements,不能有属性,全是未实现的方法,解决继承的单根性问题(一个类可以继承多个接口,接口是一种特殊的类代表一种能力的说明) 抽离类的特征生成的类:解决了冗余,类型泛化 Java中若不显示的继承一个类,则默认继承Object类 extends:继承关键字 私有成员能被继承不能被访问(private) 子类全参构造传入自己和父类的属性 父类全参构造传入自己的属性 为父类属性赋值: 1. this.指代本类 2. super.指代本类的所有父类 3. super(name,sex,age);调用父类的构造方法 子类与父类是is-a关系:是一个 父类类型变量装子类类型的对象 实例化过程中调用的是写的无参构造还是有参构造,视实例化的时候有没有传参数 只读和只写属性只提供setter或getter abstract修饰的方法若无{},以;结束,一定存在,代表抽象方法,存在于抽象类中,则子类必须覆写父类方法,抽象方法没有方法主体 fanal与static不冲突 父类保留方法的原因是父类变量存储子类对象,在调用子类方法时更方便 instanceof运算符判断类型(强制类型转换) 抽象类可以包含已实现方法,可以被子类调用 抽象方法不能出现在常规类 final声明的引用变量,空间地址不变,空间内容可以改变 面向对象设计步骤: 1.把对象抽离成类 2.把类抽离成继承关系的父子类 3.使用重写实现方法 4.创建对象为属性赋值,调用方法 反射:通过字符串得到一个对应类名的对象 subString(0,23):截取字符串 直接子类可以不直接实现抽象方法,这个直接子类也是抽象类,存在子类,让其子类实现 抽象类不能实例化,可以数组对象 查找替换:Ctrl+F 构造方法可以导入数组数据 字符串方法: 长度:length() 比较:equals()比较区分大小写 equalsIgnoreCase()比较不区分大小写 compareTo()比较ASCll码区分大小写, compareToIgnoreCase()比较ASCll码不区分大小写 toUpperCase()英文转大写 toLowerCase();英文转小写 连接: +:有一边为字符,表示连接,连接一次独立开辟一次空间 concat():连接,连接一次独立开辟一次空间 StringBuffer.append():共开辟一个空间做连接以空字符开始,连接后,用StringBuffer.toString()转为字符串 查找:indexOf():从左向右查找,返回下标 lastIndexOf():从右向左查找,返回下标 提取:substring(开始):取头不取尾 substring(开始,结尾):取头不取尾 trim():去除字符串两边的空格 Math方法: abs():取绝对值 random():随机数,0-1之间 sqrt():开方 floor():向下取整 ceil():向上取整 pow(2,2):N 次方 round():四舍五入 利用方法有返回值的要单独保存 StringBuffer类:字符串操作类,线程安全,效率低,节省内存空间 append():尾部追加方法,追加时不会产生新的内存空间 toString():将类型转换为字符串 replace(start,end,str):取出替换,取头不取尾 insert(offset,””):插入字符串,在offset之前插入 null:有变量无地址无法调用方法 空字符:有地址无内容,可以调用方法 无,undefind:类型不明确 数组:类型明确,长度固定(浪费,下标越界) 集合:类型明确,长度可变 接口:代表一种能力,是一种特殊的类 Collection: 储存一组不唯一,无序的对象 List: 储存一组不唯一,有序的对象 Arraylist:适合全查 Linkedlist:适合插入和删除 1. 第一个元素:存储数据,开辟后一个元素地址空间 2. 其他元素:存储数据,将自己的地址交给前一个元素保存,开辟后一个元素地址空间 Set: 储存一组唯一,无序的对象 TreeSet: HashSet: Map: 存储键值对象,是key(理解为自动排序)到value的映射,适合单查无序但唯一,键对值的单向映射,键具有唯一性 TreeMap: HashMap:containsKey()关键字判断一个集合是否包含一个键 方法: put():新增,无序的(有序的用的是add),键重复时为修改 get():从集合中通过键对集合元素取值 remove():通过键删除元素 set():通过键修改元素 <>:代表泛型,只能用引用数据类型,一种类型占位 接口类型只能用其实现子类实例化 集合元素实时改变,分配空间个数是按一定比例 集合方法: size():返回集合长度,创建之初为0 get():取下标方法 set():为集合元素赋值,修改找现有下标位置存值 add():插入 clear():只清空元素不重置空间 remover():要删除的元素下标位置 匿名对象: 只实例化使用,没用变量保存的对象 foreach循环:最适合遍历数组或集合元素循环;不适合单查,没有下标 for(类型 迭代变量: 数组或集合){ } for(Games g:games){ } :从数组或集合中依次取出每个元素存放发到迭代变量参与本次循环 Linkedlist方法: addFirst():首部添加元素 addLast():尾部添加元素 getFirst():取出首部元素 getLast(): 取出尾部元素 removeFirst():删除首部元素 removeLast():删除尾部元素 迭代器:遍历集合元素 1. 实例化Iterator<Game> it=games.iterator(); 2. 判断:hasNext(),判断迭代器中是否还有下一个元素,hashMap中用test.keySet.iterator();或test.values.iterator(); 3. 使用:it.next();取下一个元素 方法主体的内容被称为逻辑代码,逻辑代码必须在方法体内 变量声明和赋值可以放在方法体外 类型泛化时不能用int用Integer,不用double用Double 线程安全避免了线程并发 构造方法中Super的调用必须放在方法体首行 Vector和ArrayList的异同 实现原理相同,功能相同,很多情况下可以互用,类数组集合 区别: Vector线程安全,ArrayList重速度轻安全,线程非安全 长度需增长时,Vector默认增长一倍,ArrayList增长50% LinkedList链表集合 Hashtable和HashMap的异同 实现原理相同,功能相同,在很多情况下可以互用 区别: Hashtable继承Dictionary类,HashMap实现Map接口 Hashtable线程安全,HashMap线程非安全 Hashtable不允许null值,HashMap允许null值 构造方法设全参时注意封装 Static声明的集合直接用类调用,不用实例化后用对象调用 synchronized限制static方法的时候,在某一时刻,同一个虚拟机只能有一个线程正在执行这个static方法, wait,notify和notifyAll都只能在一个锁对象上调用 notify():唤醒在此对象监视器上等待的某一个线程.具体是哪一个可以认为是不确定的. notifyAll():唤醒在此对象监视器上等待的所有线程。 wait():导致当前的线程等待,直到其他线程调用此对象的 notify()方法或 notifyAll()方法. wait会释放占有的锁,notify和notifyAll不会释放占用的锁 warning警告:不影响编译和运行 变量声明赋值,未使用时 导包未使用时 error错误:编译期错误 exception异常:运行期错误,所有异常都是exception的子类 直接处理: 能够预估异常代码 将这些异常使用try语句块包裹监控 使用catch对异常进行捕获处理 异常抛出: Throws+异常类型,放在本方法的()后{}前 方法调用处继续抛出 方法调用处异常处理 try{}:作为监测代码块是否发生异常,必须出现且只能出现一次 catch(){ }:捕获和处理异常,可以出现,可以出现多次,异常不重复,子类异常在前 finally{}:包含无论是否出现异常都一定要执行,可以出现只能出现一次 程序中只有整数运算除数不能为0 InputMismatchException类型不匹配异常 ArrayIndexOfBoundsException下标越界异常 抽象方法不能有方法体 迭代器:遍历集合元素 StringBuffer:线程安全效率低 Stringbuilder:线程不安全效率高 replaceAll:(\\s+,” ”):正则表达式,\s代表空格
以上是关于笔记之_Java面向对象整理的主要内容,如果未能解决你的问题,请参考以下文章