类与对象
类定义了对象中所具有的变量,这些变量称作成员变量。
每个对象有自己的变量,和同一个类的其他对象是分开的。
函数与成员变量
在函数中可以直接写成员变量的名字来访问成员变量。
成员函数内部要是调用其他函数 直接上就可以了但是要是在一个成员函数内部调用另外一个成员函数就得通过对象的名字。
本地变量
定义在函数内部的是本地变量。
其生存期只是在函数内部。
构造函数
要是有一个函数名字和类的完全相同,创建每一个类的时候会自动调用这个函数。
这个函数不能有返回值。
函数重载
一个类可以有多个构造函数,参数不一样就行了。
创建对象的时候给出不同的参数值,就会调用不同的构造函数。
一个类名字一样但是参数表不一样的函数就构成了重载关系
对象 = 属性 + 服务
数据:属性或状态
操作:函数
把数据和对数据的操作放在一起——》封装
Private
只有这个类内部可以访问
类内部指类的成员函数和定义初始化
这个限制是对类的而不是对对象的
Public
如果是公共的想让大家都要访问必须前面加public,如果是公共的就要单独放到一个文件里
Static
类变量,类函数,其static函数直接能进行相互调用,并且只能相互访问量。
容器类:
容器的类型
元素的类型
范型类
private ArrayList<String> nores = new ArrayList<String>();
就是ArrayList of String 就是用来存放string的Arraylist就是叫做范型类
·对象数组中的每个元素都是对象的管理者而非对象本身
集合容器:
Set HashSet<String> s = new HashSet<>();
·对于这个类来说是数学上的集合类,直接可以选择出的数据是没有重复的,个人认为是在后面的选择输出后可以使用。
HashMap
Hash表是一种数据结构,而且其中的数据是成对出现的,一个叫做key一个叫做值,放入数据的时候就是代表一个值代表的就是这个键,之后取出数据的时候就是要把这个键所代表的那个值取出来。
有一个特性就是一样的key后面的键值会取代前面的,所有的key都是唯一的。
快捷构建函数以及添加参量 Alt + ins shift直接往下选择就好
继承
父类有什么子类就得什么,都是可能可以用的有时候会有权限的问题导致不能使用,而且子类还能添加新的东西。
父类中的private就算是子类继承了的话,但是还是只有父类能用,子类还是用不了,如果想要使用只要更改父类中的private变成protected就行了。
但是proteced有一个弊端就是只能在一个包的父类和子类使用的,但是有些时候父类可能在其他的包,这个时候
子类和子类型
· 类定义了类型
· 子类定义了子类型
· 子类的对象可以被当作父类的对象来使用
· 赋值给父类的变量
· 传递给需要父类对象的函数
· 放进存放父类对象的容器里
多态变量
· Java的对象是多态的,他们能保存不止一种类型的对象
· 他们可以保存的是声明类型的对象,或申明类型的子类的对象
· 当把子类的对象给父类的变量的时候,就发生了向上的造型。
造型c = (Car)v;
Java中其不能像c++里面对变量的命名,后一个会将前一个顶替掉,java是将前一个管理者不在管理,而是类似指针指向另外一个对象了。
父类的对象给子类变量是不可以的,但是子类的对象给父类的变量是可以的
即使造型转换和类型转换格式一样但是内部操作不一样,一个是强制将对象的类型都转换为想要的,改变了原有的造型,但是造型只是当作什么类型来看,原本的类型还是不会转变的,只是看作。
函数调用的绑定
当通过对象变量调用函数的时候,调用哪个函数这件事情叫做绑定
静态绑定:根据变量的声明类型来决定
动态绑定:根据变量的动态类型来决定
·成员函数中调用其他成员函数也是通过this这个对象变量来调用的
用封装来降低耦合
· Room类和Game类都有大量的代码和出口相关
· 尤其是Game类中大量使用了Room类的成员变量
· 类和类之间的关系叫做耦合
· 耦合越低越好\
抽象函数/抽象类
· 抽象函数--表达概念而无法实现具体代码的函数
· 抽象类--表达概念而无法构造出实体的类
· 带有abstract修饰的函数
· 有抽象函数的类一定是抽象类
· 抽象类不能制造对象
· 但是可以定义变量
· 如何继承了抽象类的非抽象类的对象可以付给这个变量
实现抽象类
· 继承自抽象类的子类必须覆盖父类中的抽象函数
· 否则自己成为抽象类
责任驱动的设计
· 将程序要实现的功能分配到合适的类/对象中是去设计中非常重要的一环
·
网格化
·图形界面本身有更高的解析度
·但是将画面网格化以后,数据就更容易处理了
接口
·接口都是纯抽象类
·接口规定了长什么样子,但是不管里面有什么
Interface
·在java中是和class相同地位的,其有class的地方就会可以有interface
实现接口
· extends是实现继承关系的,但是要是实现接口关系就得用implements
· 类可以实现很多接口
· 接口可以继承接口,但是不能继承类
· 接口不能实现接口
面向接口的编程方式
· 设计程序时先定义接口再实现类
· 任何需要在函数间传入传出的一定是接口而不是具体的类
内部类
· 类的内部再定义一个类之后,这个类就叫做内部类
· 内部类能之间访问外部的全部资源
匿名类
· 在new对象的时候给出的类的定义形成了匿名类
· 匿名类可以继承某类,也可以实现某接口
· swing的消息机制广泛使用匿名类
注入反转
· 由按钮公布一个收听者接口和一对注册/注销函数
· 代码实现的接口,将守听者对象注册在按钮上
· 一旦按钮按下,就会反过来调用你的守听者对象的某个函数
MVC
· 数据,表现和控制三者分离,各负其责
· M = Model(模型)
· V = View (表现)
· C = Control(控制)
· 模型:保存和委会数据,提供接口让外部修改数据,通知表现需要刷新
· 表现:从模型获得数据,根据数据画出表现
· 控制:从用户得到输入,根据输入调整数据
异常处理与输入
大多数的异常处理机制都是应用try{}catch{}机制,要是调用一个声明会抛出异常的函数,就是必须把函数的调用放到try中,任何设置catch捕捉可能抛出的异常。
异常声明遇到继承关系
· 当覆盖一个函数的时候,子类不能抛出比父类的版本更多的异常。
· 子类的构造函数中,必须声明父类可能抛出的全部异常。
Catch怎么匹配异常的
就是说,抛出子类异常会被捕捉父类异常的catch捕捉到
捕捉任何异常
catch(Exception){
System.err.println(“Caught an exception”);
}
这个异常是能捕捉到任何异常,包括系统异常。
运行时刻异常
· 像ArratlndexOutOfBoundsException这样的异常是不需要声明的(叫做系统运行时长)是因为这种异常太容易出现了所以就是不用沈明的。
·但是如果没有适当的机制来捕捉,就会最终导致程序终止
流是输入输出的方式
· 流是一维单项的
文件流
·FileInputStream
·FileOutputStream
·对文件的读写操作,实际的工程中都使用的很少了,更经常用的是以在内存数据或通信数据上建立的流,比如数据库的二进制数据读写或网络端口通信
·具体的文件读写有更专业的类,比如配置文件和日志文件
流过滤器
·以一个介质流对象为基础层层构建过滤器流,最终形成的流对象能在数据的输入输出过程中,逐层使用过滤器流的方法来读写数据
Data
·DataInputStream
·DataOutputStream
·用以读写二进制方式表达的基本数据类型的数据
Reader
就是常用的读取文本的方式
· 常用的是BufferedReader
· readLine()
LineNumberReader
· 可以得到行号
· getLineNumber()
FileReader
· imputStreamReader类的子类,所有方法都是从父类继承而来的
· FileReader(File file)
在给定从中读取数据的File的情况下创建一个新FileReader
·FileReader(String fileName)
在给定从中读取数据的文件名字的情况下创建一个新FileReader
·FileReader不能指定编码转换方式
记事本的编码方式是GBK,所以再读取记事本的时候需要在二进制对象FileInputStream和文本读取的对象InputStreamReader时候之间加上“GBK”即可
汉字编码
·inputStreamReader(inputStream in)
创建一个使用默认字符的inputStreamReade
·inputStreamReader(input in, Charset cs)
创建使用给定字符集的inputStreamReader
·inputStreamReader(inputStream in,CharsetDecoder dec)
创建使用给定字符集解码器的inputStreamReader
·inputStreamReader(inputStream in,String charserName)
创建使用指定字符集的inputStream
阻塞、非阻塞
·read()函数是阻塞的,再读到所需的内容之前会停下来等
·使用read()的更“高级”的函数,如nextlnt(),readLine()都是这样的
·所以常用单独的线程来做socket读的等待,或使用nio的channel选择机制
·对于socke,可以设置so时间 setSoTimeout(int timeOut)
对象串行化
·ObjectinputStream类
·readObject