一,面向对象三大特征
1,封装 属性私有化,同时给该属性提供共有的get(获取)和set(设置)方法
2,多态 一个对象可以有多个形态。父类的引用指向子类对象。(继承普通类抽象类实现接口)
实现多态:1,使用父类作为方法形参时 2,使用父类作为方法返回值
3,继承 继承子类是对父类的 重用 拓展 修改
4,抽象 抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。(另一种说法四大特征就加上)
二,常用JAVA内存分配
堆(存对象) 不存基本数据类型和对象引用 被所有线程共享
常量池(存基本类型常量和字符串常量)
方法区(方法)又叫做静态区 被所有线程共享 包含的都是程序中永远唯一的元素
方法栈(每个方法都有自己的栈,各个栈之间没有关系 可存放基本数据类型的数据)先进先出方式
SVN服务器(软件)所有成员的代码上传到一个SVN服务器上 是团队开法必须用的
三,GC垃圾回收机制
java提供了单独的守护进程,进行自动回收垃圾 防止堆内存存储对象过多发生内存溢出
垃圾:不存活的对象 判断对象存活有两种方式
1)引用计数法:给对象添加一个引用计数器,每当被引用时 计数器+1,引用失效时-1。当记数为0时 该对象就是垃圾
2)可达性分析:重肯定能访问的对象(GC Root)开始,向下遍历能遍历到的对象为可达对象,不可达对象为垃圾
常用的GC Root:栈应用的对象 方法区中的静态属性和常量
1常见的清理方法
1)标记-清理
通过可达性分析将垃圾和存货的对象,进行标记,然后清理垃圾
优缺点:方便简洁 但容易产生内存碎片
2)标记-整理
把存活对象通过挪动位置,让其扎堆存放
优缺点:防止产生大量碎片 适合垃圾对象少的情况
3)复制
把内存分为两部分 程序只在一部分执行 当使用的那部分内存满时 将存活的对象复制到另一部分内存 垃圾直接清除
优缺点:适合垃圾多 存活对象少的时候 但容易造成频繁的复制
2堆分类:新生代(活对象少垃圾多) 老年代(垃圾少活对象多) 永久代
新生代:存储程序运行时产生的大量对象(大部分为不可对象 被视为垃圾)
老年代:存储新生代中少量长时间存货的对象
永久代:存储静态文件,永久有效的文件(java8以经摒弃,被放在元空间 )
3新生代使用复制进行垃圾回收(包含三个区:伊甸区(Eden)存活A区 存活B区)8:1:1
4老年代使用标记整理进行垃圾回收
四,8种基本数据类型:byte short int long float double char boolean String不是基本数据类型 它是java提供的一个类
五,java关键字
abstract const false long short
boolean default float native static
break else while new super
byte extends void null switch
case final if transient synchronized
cast finally implements package this
catch for import private throw
char goto instanceof protected throws
class do interface public strictfp
continue double true return
六,java 常用包
java.lang.*,
java.util.*,
java.net.* ,
java.io.*,
java.text.*,
java.sql.*,
java.awt.*,
java.swing.*.
七,数组三种定义方式:
int[] s={1,2,3,4};
int[] s=new int[]{1,2,3,4,5,6};
动态定义数组:
int[] s=new int[8];
八,遍历数组:
数组长度:length
for(int i=0;i<scores.length;i++){...}
九,类 对象 数组的基本概念
类:是对某一个类事物的特征抽取,可以理解为该类事物的模板或蓝图。
对象:是某类的一个具体实例,它具有该类中定义的所有属性以及方法
数组:具有相同数据类型的一组数
十,类 抽象类 接口定义内容的区别
类中可定义:属性 方法 代码块 静态代码块 构造方法
抽象类可定义:属性 方法 代码块 静态代码块 构造方法 抽象方法(只能继承一个类)
接口可定义:抽象方法 常量值(可以实现多个接口)
十一,对象和基本数据内心基本值
属性可以直接赋值,如果没有赋值,属性有默认值,引用类型的默认值是null
基本数据类型:整数是0,浮点数是0.0,char是空格,boolean是false
十二,访问权限修饰符
public 共有的
在任何地方都能访问的:本类中、本包其他位置、子类,其他包中
protected 受保护的
本类中,本包其他位置,子类
默认(包级别)
本类中,本包其他位置
private 私有的
本类中
十三,String Stringbuffer StringBuilder区别;
String字符串是定长的 没做一次字符拼接其实是产生一个新字符串,消耗时间长 当拼接次数过多时 会造成内存资源浪费(线程不安全)
StringBuilder 每次拼接字符都是同一个对象 消耗时间最短(线程不安全)
Stringbuffer 每次拼接字符都是用一个对象 支持同步锁所以消耗时间比StringBuilder多一些(线程安全)
十四,vector ArraysList linkedList区别
1,vector 线程同步 Arrayslist和linkedlist线程不同步
2,vector和Arrayslist属于数组形式存储 linkedlist属于链表形式存储
3,vector和Arrayslist适合查找 不适合操作 linkedlist适合操作不适合查找
3,vector当数据满时自动扩大容器为%100 Arrarslist扩大%50 所以Arr...更节约空间
十五,hashMap hashtable区别
1,Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的。
2,Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。
3,Hashtable 不允许有个空的 key,但是 HashMap 允许出现一个 null key
4,Hashtable 是线程安全的 HashMap线程不安全
5,hashTable 每次扩容2n+1 hashmap每次扩容2倍
6,HashTable做元素运算需要进行一次除法运算 效率低 HashMap使用的位运算
十六,集合框架继承关系图:
Collection
List 有索引下标,元素可重复
-Vector
-ArrayList
-LinkedList
Set 没索引下标,不可重复,元素存储是排好序的
-HashSet
-TreeSet
Map <key,value>
-HashMap
-HashTable
-WeakHashMap
十七,常见的异常
异常:分为编译时异常 和 运行时异常 和程序无法恢复的异常(内存崩溃)
空指针异常:
NullPointerException
数字格式转换异常:
NumberFormatException
数组越界异常:
ArrayIndexOutOfBoundsException 数组下标越界
除0会报异常:
ArithmeticException: / by zero
类转换异常:
ClassCastException
并发修改异常;
ConcurrentModificationException 如果某个集合对象创建了Iterator或者ListIterator,然后其它的线程试图“结构上”更改集合对象,就会抛出并发修改异常
非法数据异常
Illegal Argument Exception 如果某个集合对象创建了迭代器或者列表迭代器,而其他线程已经从结构上更改了集合对象,在调用Set()方法就会抛出非法数据异常