分析系统的中的方法和变量
观察或者分析这些对象,根据这些对象把它抽象出类
根据相同属性的方法抽象出父类,这个类一般情况都会定义成抽象类(有很多相同)
针对不同的类拥有相同的属性或方法,抽象出接口(一个属性或一个方法相同)
面向对象的继承性:
首先了解继承的用处,继承是为了节约代码量,将多处作用一样的代码收集到一个类中,抽象出父类,当需要使用到这个类中的代码时,创建一个新类使用extends继承这个类中的变量,在新类的方法中使用super()调用父类中的变量或方法,以免同样的代码重复太多。当然,继承了父类中的子类 变量也不是全部,可以添加更改继承的变量也可以重写继承的方法。
多态性:
继承了父类的方法在子类中再将继承的方法写一遍叫方法的重写,在同一个类中将一样的方法再写一遍但其中要带入参数,这叫方法的重载,类似构造函数的无参构造和有参构造。
Private :
修饰变量或方法,使变量或方法变为私有的,修饰过的变量和方法只能在本类中使用
使用该关键字要配合对应的getXxx()和setXxx()方法,也就是封装。
Public:
公用修饰关键字,使变量或方法能被所有地方使用。
Final:
类似C语言中的宏定义,用于定义常量,定义过的标识符内储存的值不允许再改变。
定义方法或类,该类不能被继承,则方法不能被调用
Static:
静态修饰,使变量或方法变为静态,静态方法可通过类直接调用,静态方法调用外部变量时,外部变量也必须静态变量。静态变量同样也只能被静态方法调用。若非静态方法一定要调用静态变量,可以在方法内将静态变量所在的类实例化创建对象。
Enum:
定义枚举类型关键字,在一个新类中使用该关键字定义枚举类型,把所有能选择的选项列在一个{}内,类似下拉菜单,使用了该类型的变量的值只能是{}内的选项。
Enum 类型名{
列举1,列举2
}
构造方法:
构造方法分有参构造和无参构造,构造方法没有返回值不需要void,只要有一个public能被调用就行。构造方法的名称必须与类名相同。
抽象类:
使用Abstract修饰的类,抽象类不能被实例化,想使用其中的方法或变量只能用继承。抽象方法其父类必须是抽象类,抽象方法没有主体,只能被继承父类的子类重写。
接口:
从抽象类继承方法的子类中,有一些子类有自己的方法,这个方法和别的某些子类中的方法又有共同的作用,有些子类没有这个方法时,可以使用interface创建一个接口,
public interface IFly {}
接口中创建一个接口方法,接口方法不允许带有主体所以和抽象方法一样。
接口方法的名称要和子类中需要连接的共同方法名称一样。再让子类implements接到接口名
Pet implements IFly{}
集合:
Java自带的util包中的类List,Set,Map实例化后的到的集合。
List是有顺序的存储,按存入的顺序自然排序,可以保存重复的元素,查看时可以根据存入顺序输入序号查看,跟数组一样是从0开始计数。
List的实例化
List list =new arrayList();//和一般实例化不同这里后面类名不一样
List.add(内容);//输出时使用list.get(序号或内容);
linkedList.addFirst(内容);//在链表表头增加数据
linkedList.addLast(内容);//在链表表尾增加数据
add方法存入,get方法取出。
删除 list.Remove(内容);
Set内部有它自己的存储顺序,不会按着存入的顺序排,所以输出查看其中数据时只能匹配内容,而List是可以使用int型序号查看,而且不允许出现重复元素。
Set set =new HashSet();
Map存储时要键值与内容两两存入,无顺序存入,通过键值查看内容。
Map常用子类有两个HashMap和Hashtable
hashMap:允许键值为空
Hashtable:不允许键值和内容为空。
Map map =new HashMap();
map.put(键值,内容);//与其他不同Map的存入使用的是put方法。
Iterator迭代器:
HashSet类中没有提供根据集合索引获取索引对应的值的方法,因此遍历HashSet时需要使用Iterator迭代器
Iterator主要方法见上图
Iterator iterator = set.iterator();//返回对set 中的元素进行迭代的迭代器
泛型:
在建立对象时不指定类中属性的具体类型,而是在声明及实例化对象时由外部指定。泛型可以提高数据安全性
List<具体类> 对象名称 = new ArrayList<具体类>();
只接受尖括号内的具体类实例化的对象。除此之外还有泛型类
定义一个类,获得坐标。坐标可以用整数,小数,字符串表示,这时候就可以使用泛型类定义
class 类名 {}
异常处理:
异常是在语法正确的情况依然因为某些因素报错的情况,这时候就需要预先处理异常以保证程序的正常执行。
异常类 说明
- NullPointerException 访问Null对象的方法
- IllegalArgumentException 接收非法参数
- ClassNotFoundException 不能加载所需要的类
- ArithmeticException 算术运算异常,如除数为零
- ArrayIndexOutOfBoundsException 数组小于或大于数组的长度
- InputMisMatchException 接收的数据类型与实际输入的类型不匹配
- NumberFormatException 格式化数据异常
- IOException 文件读写异常
使用try-catch-finally
每个关键字有独立的代码块
Try内存放是预见会出现异常的代码
Catch是try中代码出现异常的解决方案
Finally未找到异常或有异常并解决的统一出口,不管有没有异常都会执行Finally中的代码
Try
{
会出现异常的代码
}catch{
出现异常后的解决方案
}
Finally{
Try中程序不管有没有异常都会执行此处代码块
}
这事在程序执行时方法内部的自行解决方法
Throws声明某个方法会报出异常但不处理,而是交给方法的调用处进行处理
返回类型 方法名称(参数列表) throws 异常类 { }
java常用包
lang包:
java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类;
这里只提一个印象较深感觉比较常用的类Math类。
Math类中提供了一系列基本数学运算的方法因为其中的方法都被修饰为private不能被实例化,但都是静态的可以通过雷名直接调用,其中的方法可以比较大小,平均值,最大值最小值等基本数学运算方法 。
其中有一个印象比较深的random方法,生成随机数的方法,该方法生成的数是大于零小于一的浮点数,所以使用该方法时会配合一个算法确保生成的数在自己想要的范围之内,因为生成的是浮点数还有配合int强转成整型。
比如:
(int)Math.random()*(100-10+1)//随机生成一个1~100的数
lang包中还有一些常用的方法
- 使用length()方法计算字符串的长度
- 使用concat()方法拼接字符串
- 使用equals()方法比较两个字符串是否相等
- 使用subString()方法截取子字符串
- 使用valueOf()方法转换字符串为数字型
util包
util包是一个工具包,里面包含的是一些常用的工具类。
比如日期输入:
日期类型Date实例化的对象输出只会形成美式日期格式很难看懂
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
使用上述代码可以对日期重新编排格式。
输出是使用 sim对象 sim.format(date);
io包
java.io包也是Java内置的包,其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类
演示代码如下:
//指定要读取的文件路径及文件名
File file = new File("C:\\offline_FtnInfo.txt");
try {
FileInputStream fil = new FileInputStream(file);//文件输入流,对文件进行读取操作
byte[] buf = new byte[(int) file.length()];//创建一个与文件大小一样的数组
fil.read(buf);//读出文件到buf
System.out.println(new String(buf));//输出buf
fil.close();//关闭流对象
}
catch (Exception e) {
// TODO: handle exception
}
若要写入文件
将FileInputStream改为FileOutputStream
把赋给数组buf的值改为
字符串变量名.getBytes();
Fis.write(buf);把buf的值写入file指定的文件。
FileOutputStream fil = new FileOutputStream(file);
byte[] buf = str.getByte();//使用getByte把字符串内容赋给数组
fil.write(buf);将数组内容写入文件
fil.close();//关闭流对象
序列化:
平时玩的某些单机游戏会有存档功能,而电脑中有一个专门用来保存存档的文档,只需将这个文档拷贝出来就可以把自己游戏的进度随意带到任何电脑上,这就是序列化。
序列化需要使用到一个类ObjectInputStream类。
一个对象能够序列化的前提是实现Serializable接口,Serializable接口没有方法,更像是个标记。有了这个标记的Class就能被序列化机制处理。
ObjectOutputStream能把Object输出成Byte流。我们将Byte流暂时存储到文件里。
如果要从持久的文件中读取Bytes重建对象,我们可以使ObjectInputStream。
FileInputStream fis = new FileInputStream("d:\\sad.pxy");
ObjectInputStream ois = new ObjectInputStream(fis);
......
ois.close();
fis.close();
FileInputStream 和ObjectInputStream若在同一段代码中,写在前面的一方要最后关闭,写在后面的一方要在前一方之前关闭