javaSE之总结(一)
一 SE的知识体系:
- java基础:
- 一基础语法
- 8个基本数据类型——>8个包装类
- 数据类型转换:
- 自动转换(从小到大)
- 强制转换(从大到小)
- 注意:int 和char
- 分支与判断:
- if(){}
- if (){}else{}
- if(){}else if(){}...else{}//多次判断
- if(){if(){}}else{} //嵌套判断
- 判断条件 ?表达式1 :表达式2;//三目运算
- switch(变量:int byte enum char String){case : ; break;} 注意: break的使用!
- 循环:(重点,必须掌握)
- while
- do while
- for
- for(数据类型 变量: 数组或集合)(foreach) 例如:以下的代码不推荐(效率低) for(int i=0;i<list.size;i++){ list.get(i); } //以上的代码应改为(效率高) int size = list.size(); for(int i=0;i<size;i++){ list.get(i); }
- 数组:是引用类型
- 特点:内存连续、通过下标操作、数据类型相同
- int[] arr = new int[];
- int[] arr = {2,3,4,4};
- int[] arr = new int[]{1,2,3};
- 类与对象:
- 对象:是一个具体的拥有一个特征和行为的事物。
- 类:是抽象的,某些具有相同的特征和行为的实务的集合(抽象)。
- 类是模板,对象是通过类创建出来的。
- java的程序的最小单位是类。
- 类的构成:
- 属性
- 读写属性(常用的)
- 只读(保护)
- 只写(隐藏:安全)
- 静态属性(类属性)
- 方法
- 实例方法
- 类(静态)方法
- 构造方法 注意:1:无返回值 2:名称与类同名 3:不能显示调用 4: jvm提供一个默认构造器,一旦声明带参构造,默认构造就不存在
- 抽象方法
- 特点:没有方法体(实现)
- 作用:让方法重写
- 本地方法(native:调用本地api)
- 代码块
- {}//构造块
- static{//静态块}
- 属性
- 一基础语法
当我们创建(实例化)对象时,先执行类加载器(把要创建的类的对应的class文件加载到内存中,jvm完成对class文件的检验工作),首先执行静态块,然后执行构造块,最后执行构造器。
A a = new A();
-------------------------------------------------------------------------------------------------------------------
class A{
static{
//静态块:只执行一次且在类被加载后马上执行
//优先于构造块
//全局的且比较消耗资源的:例如数据库连接
}
{
//构造块,每次创建对象时,都会调用
//优先于构造方法执行的
}
public void show(){
A a = new A();
a.show();
disp();//OK
//A();//显示调用构造器,错误!
}
public static void disp(){
A.disp();
show();//不能: 静态只能访问静态
}
}
-------------------------------------------------------------------------------------------------------------------
2二 面向对象:
- 封装:隐藏代码实现
- 继承:代码重用
- 多态:多种实现
- 封装通过private且提供对应的get和set方法
- 类就是对数据和操作的封装
- 继承的实现:通过extends实现
- 继承是 is a的关系
- 继承的注意:
- 子类会继承父类(除构造)以外的所有成员(包括私有的)。
- 子类就可以对父类的方法进行Override(重写)
- 子类要比父类"大"(子类包含父类)
- 父类与子类存在的类型转换(向下转型)instanceof
- 子类在访问父类的protected的属性和方法时,不能通过父类的引用进行调用,可以使用this或super直接调用
- java的继承是单根继承(一个类最多只能有一个父类,一个父类可以有多个子类)
- 当使用父类的引用创建子类对象时(多态的调用),此时调用的发放是子类的
- 属性是不支持重写的!
- 继承的注意:
——————————————————————————————————————
class Base{
public int m = 100;
public void show(){}
}
class Child extends Base{
public int m = 200;
public void show();
}
class Test{
Base base = new Child();
base.m; //调用的m是父类的m
base.show(); //子类的show() ——>重写
}
——————————————————————————————————————
区别 重载 重写
英文 Overload Override
范围: 本类 父子类
方法名 相同 相同
返回值 无关 相同
参数列表 必须不同 相同
访问修饰符 无关 子类重写父类的方法必 须大于等于父类的方法
-------------------------------------------------------------------------------------------------------------------
多态:(非常重要!!!)
- 多态的实现方式:
- 抽象类
- 接口
- 多态的表现形式:
- 参数是父类(接口) 特点:发生在编译器,执行效率高,不灵活
- 返回值是父类或接口 特点:发生在运行时,执行效率不高,灵活
-------------------------------------------------------------------------------------------------------
区别 抽象类 接口
英文 abstract class interface
抽象层次 部分抽象 完全抽象
与类的关系 is a can do
构造方法 有 无
作用 更强调对属性的封装 更强调对方法的封装
(继承:重写方法)
-------------------------------------------------------------------------------------------------------------------
相同
不能实例化
可以实现多态 可以有多个子类 可以有多个实现类
----------------------------------------------------------------------------------------------------------------
3 三基本API
Object类
toString——>自定义该对象的字符串描述(强烈推荐重写)
equals——>进行对象之间(值)的比较
hashCode——>返回该对象的堆的十进制地址
java.util.*
a 日期、时间——>Date——>
b 随机数:java.util.Random nextInt(边界值)
-------------------------------------------------------------------------------------------------------------
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH)+1);//0-11
System.out.println(Calendar.DATE);
//c.add(Calendar.DATE,40);
GregorianCalendar calendar = new GregorianCalendar(Locale.CHINA);
System.out.println(calendar.isLeapYear(2016));//判断2016是否是闰年
------------------------------------------------------------------------------------------------------------------
包装类:目的提供一些类型之间饿的转换操作
装箱:把值类型赋值给引用类型
拆箱:把装过箱的引用赋值给值类型
装箱与拆箱的目的:简化编程
4四IO
- 四个抽象类:
- 字节流:
- InputStream
- OutputStream
- 字符流:
- Reader
- Writer
- 特别强调:
- 缓冲流的使用(利用缓冲机制,提供读写效率)
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
- 对象(集合)的读写:
- 序列化:ObjectOutputStream
- 反序列化:ObjectInputStream
- 注意:一个类必须实现java.io.Serializable(序列化接口),才可以进行序列化操作
- 缓冲流的使用(利用缓冲机制,提供读写效率)
- 特别强调:
- 字节流:
- 三个步骤:
- 创建流
- 读写
- 关闭流
5五 集合
- 集合的构成
- 接口
- 实现(类)
- 算法(collection类)
- 集合的框架:java.util.Iterable
——java.util.Collection
——List(有序、可重复)
——ArrayList(异步) 以数组结构来组织的
——Vector(同步)
——Stack(栈)
——LinkedList 是以双向链表结构 来存放的
——Set(无序,不可重复)
——Hashset()通过哈希算法将该值换算为数组的下标索引
——Treeset() 使用二叉树来存放和管理数据
——Map
——Hashmap(异步、可存放null)
——Hashtable(同步、不能存null)
迭代key: keySet()
迭代value: values()
迭代k v : entrySet()