第一篇文章----java基础简略梳理(上课笔记)

第一次写文章,写的不好的话请大家见谅,希望和大家交流知识
这是我刚开始学习时候的基础知识了,虽然是很早之前整理出来的但是最近才想起来发出来
希望对大家有所帮助
谢谢

语法部分
1. Java基本概述
a) 特点:完全面向对象、安全可靠
b) 面向互联网、移动互联网、大数据
c) Java之父:James.Gosling
2. Java技术结构
a) JAVASE:标准版。为桌面程序提供解决方案
b) JAVAEE:企业版。为企业的团队开发提供有效的解决方案
c) JAVAME:微型版。为小型的电子设备的嵌入即应用提供解决方案
3. Java的跨平台的原理
a) Java之所以能够跨平台(可移植),是因为有JVM来支撑
b) JVM不跨平台,每一个操作系统都有JVM与之对应
4. JDK、JRE、JVM的关系
a) JVM—Java虚拟机。是Java程序跨平台的前提
b) JRE—Java运行时环境。包含了JVM+核心类库
c) JDK—Java开发工具包。包含了JER+开发工具包
5. 入门程序
a) Java代码必须放到后缀名为.java的文件中
b) 每一个类在编译完成之后都会产生一个class文件,class文件名和类名对应
c) 一个Java文件中可以定义多个类,但是只能有一个公共类,公共类必须与Java文件名一致
d) javac –d 存放路径 要编译的Java文件
e) java –cp class文件的存放路径 包名.类名
6. 关键字
a) 一共有53个关键字,其中有2个没有使用:const、goto
b) 所有的关键字都是小写
7. 标识符
a) 可以由字母(常见语言的基本字符)、数字、_、 使 符 号 组 成 , 类 名 中 不 建 议 使 用 ,因为类名中出现$往往意味着这是一个内部类
b) 数字不能开头
c) 不能使用关键字
d) 区分大小写
e) 见名知意
f) 驼峰命名法
8. 注释
a) 作用:解释说明程序,拍错
b) 格式:
i. 单行注释 //
ii. 多行注释 /* */
iii. 文档注释 /* / — 利用javadoc命令来生成文档
9. 计算机常量
a) 整数常量—所有的整数
b) 小数常量—所有的小数
c) 字符常量—用 ‘’ 标志起来一个符号
d) 字符串常量—用 “” 标志起来的多个字符
e) 布尔常量—true/false—用于标记逻辑值
f) null常量—null—用于占位,表示无值状态
10. 进制及其换算
a) 二进制:0-1,满2进1,从jdk1.7开始,允许在程序中以0B/0b开头
b) 八进制:0-7,满8进1,需要0开头作为标志
c) 十进制:0-9,满10进1
d) 十六进制:0-9,a-f,满16进1,需要以0x/0X开头标志 0x29+0x1=0x2a
e) 十进制转二进制:不断除以2,取余,将余数倒排
f) 二进制转十进制:从低位次开始,按位次乘以2的位次次幂,然后求和
g) 其他进制转十进制:从低位次开始,按位次乘以对应的进制的位次次幂,然后求和
h) 二进制和八进制转换:二转八是三变一,八转二是一变三
11. 变量
a) 三个要素:数据类型、变量名、数据值
b) 变量在哪儿定义在哪儿使用
12. 数据类型及其转换
a) 基本数据类型和引用数据类型
b) 引用类型:数组、类、接口
c) 基本类型:byte(1) short(2) int(4) long(8) float(4) double(8) char(2) boolean—根据jdk的版本和操作系统的版本来确定
d) 要求记住byte的范围: -128~127
e) 自动转换:整转小,小转大
13. 运算符
a) 算术:+ - * / % ++ –
i. byte/short/char参与运算的时候会自动提升为int
ii. 整数在运算完成之后结果一定是整数
iii. 不同数字除以0的结果也不一样:整数/0—ArithmeticException 非零小数/0,非零数字/0.0—无穷大 0/0.0 0.0/0 0.0/0.0—NaN
iv. %可以对整数和小数都进行取余
v. ++/–如果在前的话先自增后参与运算;如果++/–在后,先参与运算后自增
vi. byte/short/char可以参与自增运算,结果类型不变 char c = ‘b’; c++; c - > ‘c’
b) 赋值: = += -= *= /= %= &= |= ^= <<= >>= >>>=
i. 除了=,其他的符号都要求变量先有值才能参与运算
ii. 赋值运算符的优先级最低
iii. byte/short/char可以参与赋值运算
iv. 注意赋值运算的连等方式
c) 关系:== != > < >= <= instanceof
i. 关系运算符的结果一定是布尔值
ii. instanceof判断对象是否是类或者是其子类的实例的
d) 逻辑:& | ! ^ && ||
i. ^的运算规则相同为假,不同为真
ii. &&和||会有短路特性—||能够把&&给短路掉
e) 位:& | ^ << >> >>> ~
i. 针对整数的补码进行运算
ii. 交换值:追尾法、加减法、异或法
f) 三元
i. 格式:逻辑值?表达式1:表达式2;
ii. 两个表达式的结果类型要能够转换
14. 流程控制
a) 顺序结构:代码从上到下从左到右依次编译运行的
b) 分支结构:
i. 判断结构:if, if-else if-else if
ii. 选择结构:switch-case
1. case的顺序是否影响结果要取决于每一个case之后是否有break
2. switch()的值的类型是byte/short/char/int,从jdk1.7开始允许使用String
c) 循环结构:while, do-while, for
d) break和continue:
i. break用于选择和循环结构中。只能终止一层循环或者选择结构
ii. continue用于循环结构中,表示跳出当前一层循环继续下次循环
iii. break和continue都支持标号形式
15. 数组
a) 存储多个同一类型的数据的容器—大小固定
b) 数组排序:冒泡排序、选择排序—时间复杂度O(n2),空间复杂度o(1)
c) 数组元素的查找:如果数组无序只能遍历查找;如果数组有序可以使用二分查找—时间复杂度O(logn),空间复杂度o(1)
d) 数组的反转:头尾互换
e) 数组的复制:System.arraycopy—Arrays.copyOf—数组扩容完成之后地址一定改变
f) 数组内存:数组是存到堆内存中,并且在堆内存中会自动的赋予默认值— byte/short/int-0 long-0L float-0.0f double-0.0 char-‘\u0000’ boolean-false,引用类型的默认值都是null
16. 二维数组
a) 存储一维数组的容器
b) 二维数组的内存—二维数组的每一个位置上存储的是一维数组的内存
17. 方法
a) 作用:为了重复利用某一段代码—复用
b) 方法的返回值
i. 明确方法的返回值
ii. 如果没有返回值,返回值类型是void
c) 方法的参数
i. 形参:定义方法的时候写的参数列表
ii. 实参:调用方法的时候传入的实际数据
d) 方法的重载:在同一个类中方法名一致而参数列表不同(对应位置上的参数类型),和修饰符、返回值、异常没有关系,是一种编译时多态
e) 方法的重写:在父子类中存在了方法签名一致的非静态方法。是一种运行时多态
i. 方法签名一致
ii. 如果父类的方法的返回值类型是基本类型/void/最终类,那么子类方法的返回值类型要一致
iii. 如果父类的方法的返回值类型是引用类型,那么子类在重写的时候返回值类型是父类方法返回值类型的子类
iv. 子类抛出的异常不能超过父类异常的范围—编译时异常
v. 子类方法的权限修饰符的范围要大于等于父类方法权限修饰符的范围
f) 方法的递归:在方法中调用了自己本身—本质上就是在调用方法。方法递归的层数比较深会出现StackOverflowError—方法在栈内存中执行 — 思路主要是倒推
g) 方法的传参:对于基本类型而言,传参传的是实际数据;对应引用类型而言,传参穿的是地址。如果在新的方法中地址发生改变,不影响原来方法中的对象。如果地址没有改变,则会影响原来的对象。

*面向对象*
1. 面向对象和面向过程的比较强调内容
a) 面向过程强调的过程,面向对象关注的是对象
b) 面向对象是基于面向过程
c) 面向对象是适用于相对比较复杂的场景,面向过程相对适用于简单的场景
2. 类和对象的关系
a) 根据一类对象的共有特征和共有行为进行概括,概括的形式就是类—类本身是对象的概括/抽取
b) 对象是类的具体化
3. 成员变量和局部变量
a) 定义位置:成员变量是定义在类内方法外,局部变量是定义在方法中
b) 作用范围:成员变量是作用在整个类中;局部变量是作用在当前的方法或者是语句中
c) 内存位置:成员是随着对象放到堆内存中,并且在堆内存中会自动的给一个默认值;局部变量是在方法或者语句执行的时候存储到栈内存中
d) 生命周期:成员变量在对象创建的时候出现,在对象被回收的时候别销毁;局部变量是方法或者语句执行的时候创建,在方法或者语句执行完成之后立即销毁
4. 构造方法
a) 作用:创建对象
b) 定义格式:与类同名,没有返回值类型
c) 构造方法可以被重载,不能被继承也不能被重写
5. this
a) 代表了当前在活动的对象的引用,可以认为成是一个虚拟对象
b) 作用:在本类中调用本类或者从父类继承过来的方法或者属性
c) this语句:在构造函数中调用本类其他形式的构造函数—要求必须放在构造方法的第一行
6. 代码块
a) 局部代码块:定义在方法中。用于变量的使用范围的生命周期,以提高内存的利用率
b) 构造代码块:定义在类内方法外。在创建对象的时候,先于构造函数执行
7. 面向对象的特征
a) 封装、继承、多态
b) 如果提到了第四个特征,可以加上抽象
8. 封装
a) 体现形式:方法、属性私有化、内部类
b) 作用:复用性、安全性(保证数据的合法性)
9. 继承
a) extends来完成继承
b) 在Java中类和类之间是单继承,接口和接口之间是多继承
c) 单继承和多继承比较:多继承在代码的复用性上要优于单继承;但是单继承能够更好的避免方法的调用的混乱
d) 作用:复用性、明确方法的调用
10. 多态
a) 根据绑定时期:
i. 编译时多态:方法的重载
ii. 运行时多态:方法的重写和向上造型
b) 根据现象:
i. 对象多态:向上造型
ii. 行为多态:方法的重载和重写
c) 作用:提供代码的灵活性,便于统一调用子类的方法
11. 权限修饰符
a) public protected 默认 private
b) protected能在本类中、子类中(对应子类)、同包类中使用
12. super
a) 代表父类对象的引用,可以认为是一个虚拟对象
b) 在子类中调用父类的方法或者属性
c) super语句
i. 定义在子类的构造方法中,表示调用父类对应形式的构造方法
ii. 如果在子类构造中没有手动提供super语句,那么在编译的时候会默认添加无参super
iii. 如果父类只提供了含参构造,要求子类中必须手动提供对应形式的super语句
iv. super语句必须放在子类构造函数的首行
13. static
a) 静态变量。随着类的加载而加载到方法区中的静态区,在静态区中被赋予默认值。静态变量比对象先出现,所以可以通过类名来调用静态变量。这个类的每一个对象存得静态变量在静态区中的地址,所以静态变量是被共享的。—静态变量只能定义在类中
b) 静态方法。在类加载的时候加载到方法区中的京台区,在静态区中存储没有执行,在方法被调用的时候到栈内存中执行。静态方法先于对象存在,所以习惯上是通过类名来调用静态方法。静态方法可以重载,可以被继承,不能被重写,但是在父子类中可以存在方法签名一致的静态方法(隐藏)。—如果父子类中存在了方法签名一致的方法,要么都是静态,要么都是非静态。—静态方法中不能直接调用本类中的非静态方法和非静态属性
c) 静态代码块。在类中用static{}限制的代码。
i. 在类第一次真正使用(创建本类对象或者调用本类方法)的时候执行
ii. 执行顺序:加载父类(父类的静态),加载子类(子类的静态),创建父类对象(父类构造),创建子类对象(子类构造)
d) 静态内部类
14. final
a) 常量
i. 定义好之后不可变—基本类型是实际值不可变,引用类型是指的地址不可变,属性可以变化
ii. 成员常量:在定义的时候、构造代码块中、构造函数中 —在对象创建完成之前给一次值
iii. 静态常量:在定义的时候、静态代码块中 —在类加载完成之前给一次值
b) 最终方法:可以重载,可以被继承,不能被重写
c) 最终类:不能被继承。—一定不是抽象类,一定不存在匿名内部类形式
15. abstract
a) 抽象类
i. 不能创建对象,有构造方法
ii. 抽象类中不一定有抽象方法,但是抽象方法所在的类一定是抽象类
iii. 抽象类中可以有定义实体方法和属性
iv. 抽象类一定不是最终类
v. 子类在继承抽象类之后要重写其中的所有的抽象方法,除非子类也是抽象类
b) 抽象方法
i. 抽象方法可以被重载,一定被继承,一定会被重写
ii. 不能用static/final/private修饰
iii. 如果一个抽象方法使用默认权限修饰,要求父子类要同包
16. interface
a) 用interface来定义,用implements来实现
b) 类和接口是多实现,实现了接口之后,必须重写其中的抽象方法
c) 接口中不能定义构造方法
d) 接口中的所有的方法都是抽象方法,默认用public abstract修饰
e) 接口中可以定义属性,默认为public static final修饰
17. 内部类
a) 方法内部类、成员内部类、静态内部类、匿名内部类
b) 除了静态内部类以外,其他的内部类中只能定义静态常量,不能定义静态变量和静态方法
c) 除了静态内部类以外,其他内部类都能够直接使用外部类中的属性和方法,但是静态内部类只能使用外部类中静态方法和静态属性
d) 方法内部类在使用当前方法中的数据的时候,要求这个数据是一个常量
e) 匿名内部类本质上是继承了对应的类后者是实现了对应的接口,因此任何一个接口都可以存在匿名内部类形式,除了最终类以外的其他类都可以存在匿名内部类形式
f) 类中定义的接口、接口中定义的类和接口默认都是静态的
18.
a) 声明包用的是package,导包用的是import
b) 一个Java文件中只能有一个package语句,而且这句package必须放在Java文件的第一行
c) * 表示导入当前包下的所有类而不包括子包下的类
d) 在使用java.lang和同包中的类的时候可以不用导包
e) java.lang是Java的核心包 java.util是Java的工具包
19. 垃圾分代回收机制
a) 针对的堆内存
b) 回收无用对象的机制称之为垃圾回收器(GC—Garbage Collector)。Java的内存回收是自动回收的过程。一旦Java的内存出现问题是无法解决
c) 将堆内存划分为新生代和老生代。新生代划分为伊甸园区和幸存区。对象刚创建的时候会放入伊甸园区,在伊甸园区经过一次回收,这个对象依然存在则挪到幸存区,在幸存区中经过多次扫描如果这个对象依然存活则挪到老生代。老生代的回收频率要远远低于新生代。
d) 老生代的对象一旦产生回收可能会导致程序的卡顿甚至于崩溃
e) 发生在新生代的回收—初代回收(minor gc)
f) 发生在老生代的回收—完全回收(full gc)
g) 注意,如果一个对象刚创建好之后在伊甸园区放不开,则会直接试图放入幸存区,如果幸存区放不开,则会直接试图放入老生代。如果老生代也放不开,则会出现OutofMemoryError
h) 如果GC回收的速率比不上对象产生的速率,也会出现OutofMemoryError
20. 类加载机制
a) 类加载分为5个阶段
i. 加载:将class文件转换为字节码放到内存中
ii. 校验:检查这段字节码的合法性
iii. 准备:为静态变量分配空间并标记默认值
iv. 解析:符号和引用的转化
v. 初始化:为静态变量赋值,执行静态代码块
b) 类加载器—ClassLoader
i. 启动/引导类加载器—Bootstrap ClassLoader
ii. 扩展类加载器—Extension ClassLoader
iii. 应用类加载器—Application ClassLoader
c) 在Java中加载一个类采取的是双亲委派机制

API
1. Object
a) 顶级父类,所有类的对象都可以用Object对象来接住
b) getClass—获取对象的是实际类型
c) equals—比较两个对象是否相等,默认比较的是地址,但是实际开发中往往需要重写
d) toString—将对象转化为字符串形式
2. String
a) 最终类,代表了字符串
b) 在底层是以字符数组形式存储的数据
c) 了解字符串的存储机制—存储在常量池
d) 拼接多个对象,建议使用StringBuilder
e) StringBuilder是一个线程不安全的类,StringBuffer是一个线程安全的类
f) 了解不同形式下字符串创建的对象的个数 String str = new String(“abc”);— 2
3. Pattern
a) 正则表达式:指定规则,用这些规则进行匹配、筛选
b) 要求会写简单的正则即可
4. 包装类
a) 每一种基本类型对应的类形式就是包装类— int-Integer char-Character
b) 自动封箱:将基本类型直接赋值给对应的引用类型,底层是调用了类上的valueOf方法
c) 自动拆箱:将引用类型直接赋值给对应的基本类型,底层是调用了对象上的***Value方法
d) 整数在自动封箱的时候有范围判断: -128~127
e) 包装类对象的哈希码在任何环境下都是不变的
5. 数学类
a) Math:提供了针对基本类型进行初等运算的静态方法
b) BigDecimal:用于精确的数学运算的类,要求参数必须是字符串形式
6. 日期类
a) Date:日期—掌握字符串和日期之间的转换—SimpleDateFormat
b) Calendar:日历—了解
7. 异常
a) 是Java中一套用于反馈和处理问题的机制
b) 顶级父类是Throwable:Error和Exception
c) Error:表示的是错误,一旦出现无法处理
d) Exception:表示的是异常。出现之后可以处理
i. 编译时异常:在编译的时候出现,要求必须处理:要么抛出,要么捕获
ii. 运行时异常:在运行的时候才出现。可以处理,也可以 不处理
e) 异常的捕获方式
i. 多个catch分别捕获单个处理
ii. 一个catch捕获父类统一处理
iii. 同组异常用|隔开分组处理—jdk1.7开始
f) 运行时异常随意抛出随意捕获,但是编译时异常必须在抛出之后才能捕获
g) 任何时候都可以捕获一个Exception对象
8. 集合
a) 存储多个数据的容器—大小不固定
b) 顶级接口Collection:List,Set
c) List:列表,元素有序可重复
i. ArrayList:底层是基于数组。内存空间连续。默认初始容量是10 ,每次增加一半(右移)。线程不安全。便于查询不便于增删
ii. LinkedList:底层是基于节点。内存空间是不连续。线程不安全。便于增删不便于查询
iii. Vector:底层是基于数组。内存空间是连续。默认初始容量是10,默认每次增加一倍。线程安全。
iv. Stack:栈。继承了Vector。遵循先进后出
d) Set:元素无序不可重复
i. HashSet:默认初始容量是16,加载因子是0.75f,每次增加一倍。线程不安全
9. 比较器
a) Comparator:重写compare方法,将比较规则放到compare方法。如果返回值是一个正数,说明第一个参数比较大,那么在排序的时候会自动的放到后边;如果返回值是一个负数,说明第一个参数比较小,那么在排序的手会自动的放到前边
b) Comparable:实现了这个接口的类产生的对象可以进行自然排序—在没有指定排序规则的前提下进行自动的排序
10. 迭代器
a) Iterator:本质上通过指针的挪动来遍历每一个元素。在迭代过程中不允许增删原集合
b) Iterable:允许实现这个接口的类产生的对象可以被增强for循环遍历—增强for循环本质上还是一种迭代遍历的方式
11. 泛型
a) 参数化类型—ParameterizedType,是jdk1.5的特性之一
b) 泛型的擦除:用具体类型替换泛型,发生在编译期
c) 要求看懂泛型的继承
12. 断言
a) 预测结果
b) 断言不会默认开启,需要手动添加参数开启

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值