笔记之_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面向对象整理的主要内容,如果未能解决你的问题,请参考以下文章

Python笔记之面向对象

笔记之_java整理框架

笔记之_java整理struts

笔记之_java整理hibernate

笔记之_java整理servlet

java学习笔记之面向对象多态