JAVA学习笔记(四)
十二、Java集合
1、import 和 package 的区别:
import 可以导入包,package 表示这些 java 程序文件在同一个包下。
package apackage;
import bpackage.B;
public class A {
2、ArrayList是Java的链表类,可以通过如下的代码来导入这个集合类:
import java.util.ArrayList;
import java.util.List;
通过使用ArrayList 我们可以对链表做基本的插入、删除、查询、遍历等操作。
3、Iterator (迭代器):迭代也就是遍历,这个类可以遍历容器里的所有对象,它主要有以下两种方法——
next():获取序列的下一个元素
hasNext():检查序列中是否还有元素
import java.util.Iterator;
4、for(int i:a)循环:先设置一个与a数组里的元素相同的变量,这个变量先等于a数组的第一个元素,然后进入循环体,第二次循环就等于a数组的第二个元素,进入循环体,以此类推。
5、常用容器 Map :映射,每一组映射作为一个 <键,值> 对保存在Map容器中
map.entrySet():将map里的每一个键值对取出来封装成一个Entry对象在存到一个Set里。
Map.Entry<String, String>:是一个泛型,表示Entry里装的是两个string的字符串,分别是key和value。
import java.util.HashMap;
import java.util.Map;
// List.addAll方法:添加所有元素到列表中
十三、封装
JAVA通过访问控制关键字实现信息隐藏,这些关键字包括:public、protected(只有继承自己的子类才能访问)、private
// this 的用法:不能在static方法中使用,表示对当前对象的应用,使用对象为类的成员变量而不是函数参数,只能引用一个构造方法而且必须位于开始
1、在 Source 中用 “Generate Getters and Setters”可以自动生成参数的 get和 set 方法 //想要让外部访问该成员变量,可以用这个方法给私有成员变量生成 public 访问方法 (即 setter、getter)
在 Source 中用 “Generate Constructor using Fields”可以自动生成参数的构造方法
2、使用 extends 表示继承关系,子类可以继承复用父类的代码
class A extends B {
}
3、super :表示调用父类的构造函数,调用父类中带有参数的构造函数时,用 super(方法名);
4、const:常量
5、final :用于变量声明,可以阻止其内容被修改,相当于变量常数,约定 final 变量的所有字符大写,final 变量可以被子类继承但是不能被之类覆盖,final 不能修饰构造方法
//构造方法也是一种方法,但是构造方法没有返回类型(默认无参数),且必须与类同名,用 public 修饰
// Java 中 Final 方法使用内联机制,提高执行效率
// final 修饰类(class)的时候,不能被继承
十四、抽象类与接口
1、面向对象的三大要素:封装、继承与多态
//图片转载自知乎 如何用一句话说明面向对象
2、抽象类:abstract
抽象类不能实例化对象(即不能通过 new 方法名()来创建对象),必须被继承才能使用。
abstract class 方法名 {
}
(1)抽象修饰类
(2)声明抽象方法:类中包含抽象方法则该类必须是抽象类;子类必须重写父类的抽象方法,否则声明子类自身为抽象类
// 声明抽象方法直接在方法名后加 ;
3、接口:一组抽象方法的集合,无法被实例化但可以被类实现,用 interface 定义接口,接口定义的方法没有方法体,由于接口可以外部访问,所以不需要用 public 修饰
(1)接口中也可以声明变量,一般为 final 与 static 类型,以常量来初始化,实现接口的类不能改变接口的变量;如果接口的访问权限是public 的话,它所有的方法和变量都是 public
//run方法:线程执行时需要的步骤,通过 start() 方法可以调用 run()
(2)用类实现接口:implements
类需要对接口中的每一个方法都给出实现
(3)用接口类型声明的变量可以引用到一个实现该接口的对象
// ArrayList 是 List 接口的实现;HashMap 是 Map 接口的实现
// 接口中的方法不能是静态的
package blog;
import java.util.List;
public interface PostRepository {
public void add(post Post);
public post getPostById(long id);
public void remove(long id);
public List<post> getAll();
public void loadData();
public void saveData();
}
在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们;但是抽象类不支持多继承。接口不能提供任何方法的实现,但是支持多继承
4、多线程——同时运行多个线程的程序叫做多线程程序,每一个任务称为一个线程
十五、异常
1、算术异常
2、为了使异常发生时,系统仍然能够正常运行而不是直接停止,可以使用“ try / catch ”代码
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
// printStackTrace()方法:在命令行打印异常信息在程序中出错的位置及原因
catch 代码块:
catch(ExceptionName e){
e.printStackTrace();
}
一个 try 必须有一个或者一个以上的 catch 与之对应
3、用 throws 来声明可能出现异常的方法,以便之后用 try/catch 处理
public static void fun() throws Exception{
}
4、自定义异常
//toString() :将对象转换成字符串形式,即用文字描述这个对象里各个变量是什么值、什么类型等
public class test10 extends Exception {
public test10(String string) {
// TODO Auto-generated constructor stub
}
//............
} //创建一个自定义异常
class test11 {
private static void fun() throws test10{ //通过 throws 抛出异常对象,用法为: throws 异常对象;
//.....
throw new test10("异常命令");
}
5、一个try 可以对应多个catch 语句,注意 catch 语句的顺序catch(Exception e)
语句,那么它不能放在其他catch
语句的前面,否则后面的catch
永远得不到执行,因为Exception是所有异常的父类,可以匹配任何异常。
6、finally 语句:不管异常被捕获与否都要执行,即使在 try/catch 中有 return、break 也能执行,除非之前执行了 System.exit(0)