JavasSE
2018-09-13 20:54:13 0 举报
AI智能生成
JavaSE基础基础
作者其他创作
大纲/内容
基础公共语言
程序的入口
public static void main (String[] agrs){}
输出语句
System.out.println();
变量
会变的量
example: int x = 1 ; (x)为变量
标识符
定义
对于变量、常量、函数、语句块均有名字,我们统统称之为标识符,标识符是用来给类、接口、方法、变量命名的
组成
大小写字母
数字
美刀符$
下划线 _
规范
不能以数字开头
标识符区分大小写
java的关键字不能被作为关键字
不能包括空格
除下划线和美元符号 不能包含其他符号
命名规范
类名
1.首字母大写 2. 遵循驼峰命名法
变量名
1.首字母小写 2.驼峰命名法 3.单词可以直接连接也可以用下划线连接
方法名
1.首字母小写 2.驼峰命名法 3.单词可以直接连接也可以用下划线连接
常量
1.全大写 2.多个单词用下划线拼接
项目名
全小写
包路径
1.全小写 2.域名反写
注释
单行注释
//注释的内容
多行注释
/* 注释的内容 */
文档注释
/**
* 注释内容,包括一些参数、返回值、作者等等的标注
*/
* 注释内容,包括一些参数、返回值、作者等等的标注
*/
数据类型
八种基本数据类型
数值型
int
整形
4个字节
取值范围:-2的31次方~2的31次方-1
short
短整形
2个字节
取值范围:-32768~32767
byte
位
1个字节
取值范围:-128~127
long
长整形
8个字节
取值范围:-2的63次方~2的63次方-1
long类型的数值要以字母l或者L结尾,推荐使用大写
数字默认十进制,定义八进制以0开头,定义十六进制为0x开头,定义二进制以0b开头
数字过长时,可以使用下划线分隔,下划线不影响数值大小(jdk7的新特性)
浮点型
double
双精度浮点类型
8字节
取值范围:-1.798E308~1.798E308
float
单精度浮点
4个字节
取值范围:-3.403E38~3.403E38
314E2 // 314 * 10 ^ 2 --> 31400.0
314E-2 // 314 * 10 ^ (-2) --> 3.14
314E-2 // 314 * 10 ^ (-2) --> 3.14
float类型的数值要以字母f或者F结尾
float精度不够,使用很少
字符型
char
字符型
2字节
表示范围:0-65535
布尔型
boolean
布尔型
X字节
表示:false true
在java虚拟机2.0规范中,使用boolean声明一个基本类型变量时,该变量占4个字节,在编译class文件时,将boolean编译成一个int变量,如果使用boolean声明一个数组的时候,每个数组元素占一个字节,即编译成byte数组
引用数据类型
类
接口
数组
......很多
注意
单引号用来表示字符常量,例如'a'
char类型只能表示一个字符
char类型用来表示Unicode编码表中的字符
char类型是0-65535范围内,运算时直接当作整数来运算
可以把0-65535之间的数字转化为char
java中还允许使用转意字符,使用'\'将其后的字符转变为其他的含义
char c = '\n';//代表换行符
char c = '\n';//代表换行符
Unicode
万国码/* 自己看 */
ASCII
/* 自己看 */
类型转换
容量小的数据类型可以自动转化为容量大的数据类型,此处容量不是指的是字节数,而是指的表示范围
容量大的数据类型转换为容量小的数据类型时需要强制类型转换
example:byte b = (byte)I //使用小括号填写要转的具体类型
当一种类型强制转换为另一种类型,而又超出了目标类型的表示范围时,将会截断为一个完全不同的值,此值无意义
运算符
赋值运算符
=
进行赋值 x = y 将y的值赋给x
算术运算符
+
加法运算
-
减法运算
*
乘法运算
/
除法运算 结果为整数 2/3 = 0
%
取余
2/3 = 2
类型提升
*在java中两个不同类型的数值进行运算时会进行一个自动类型提升
*byte + byte的结果为int类型
*byte + short的结果为int类型
*short + short的结果为int类型
*byte + byte的结果为int类型
*byte + short的结果为int类型
*short + short的结果为int类型
比较运算符
< <=
小于/小于等于
> >=
大于/大于等于
!== ==
不等于 等于
instanceof
判断对象是否为实例
返回结果为Boolean (false / true)
逻辑运算符
&&
与(并且)
||
或(或者)
!
非(true即为false)
位运算符
&
按位与
|
按位或
~
按位非
^
按卫异或
<<
左移
>>
右移
>>>
无符号右移
三目运算符
语句1 ? 语句2 : 语句3
语句1必须是Boolean值
语句2和语句3随意
如果语句1为true,则表达式的结果为语句2,反之则为语句3
拓展运算符
i++ / i--
先运算
++i / --i
先自己运算
i+=n
i= i + n
字符串拼接符
+
流程控制语句
分支语句
if(判断条件){true 进行的方法体}else{false的方法体}
switch(变量){case: break}
变量处只可以放置 byte、short、int、char
循环语句
while(boolean值){方法体}
do{方法体}while(判断条件)
for(语句一;语句二;语句三){方法体}
语句1赋初始值
语句2条件判断语句
语句3赋值语句
for each
遍历
三个关键字
break
停止循环 中断当层循环
continue
跳过当次循环
return
停止所有循环 停止方法
数组
定义
int[] arrays = new int[length];
int[] arrays = {list,list,list};
int[] arrays = new int[]{list,list,list}
int arrays[] = new int[length]
java中的数组定义时必须指定大小(数组的容量),并且后续容量绝对不可以改变
数组的遍历
方法
修饰词 返回值 方法名(参数列表){方法体}
面向对象
类
一些具有相同特征(属性)和行为(方法)的对象的集合
对象
一切客观存在的具体的事物都可以称之为对象,在java编程思想里的解释是"万物皆对象"
引用
java中的变量分为两种类型,一种是基本类型,一种是引用类型,引用类型简称为引用
构造函数
一个特殊的函数,不需要指定返回值类型,并且方法名必须与类名相同,用来创建对象时使用
成员属性
定义在类中的属性,可以是基本类型,也可以是引用类型,成员属性会在创建对象时初始化,如果没在构造
函数或者非静态代码块中赋值,则属性为对应类型的初始值
函数或者非静态代码块中赋值,则属性为对应类型的初始值
成员方法
类中定义的方法为成员方法(当然除了构造方法和静态方法)
局部变量
定义在方法中的变量为局部变量
类的加载机制
java中类是惰性加载,用到的加载,不用不加载
三大特性
封装
private
概念
隐藏对象的具体实现细节,仅对外提供公共的访问接口(注意此处不是后续学到的接口,此处指的是方法)
实现
1).利用private将属性私有,利用公共的get、set方法提供属性的访问方式
2).方法本身也具有封装的概念
3).类本身也具有封装的概念
2).方法本身也具有封装的概念
3).类本身也具有封装的概念
优点
.良好的封装能够减少耦合。
2).类内部的结构可以自由修改。
3).可以对成员进行更精确的控制。
4).隐藏信息,实现细节。
2).类内部的结构可以自由修改。
3).可以对成员进行更精确的控制。
4).隐藏信息,实现细节。
继承
extends
概念
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩
展新的能力
展新的能力
继承规则
1).java中类之间的继承叫做单根继承,一个类只能继承一个父类(这点与c++中有显著区别),但是父类的父类
也作为自己的父类,代码也能继承过来
2).继承的可以是类也可以是抽象类
3).一个类如果没有显式的通过extends关键字继承一个类,那么这个类默认继承自Object类
*也就是说Object是java所有类的父类,也叫做超类(根类)
也作为自己的父类,代码也能继承过来
2).继承的可以是类也可以是抽象类
3).一个类如果没有显式的通过extends关键字继承一个类,那么这个类默认继承自Object类
*也就是说Object是java所有类的父类,也叫做超类(根类)
多态
指允许不同类的对象对同一消息(方法的调用)做出响应。即同一消息可以根据发送对象的不同而采
用多种不同的行为方式。
用多种不同的行为方式。
动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其
相应的方法,动态绑定依赖于父类的引用指向子类的对象来实现
相应的方法,动态绑定依赖于父类的引用指向子类的对象来实现
存在条件
1).要有继承或者实现
2).要有重写
3).父类的引用指向子类的对象
2).要有重写
3).父类的引用指向子类的对象
1).可替换性:多态对已存在代码具有可替换性。例如,多态对圆类工作,对其他任何几何体,
如矩形、三角形也同样工作。
2).可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他
特性的运行和操作。实际上新加子类更容易获得多态功能。
3).接口性:多态是父类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的
4).灵活性:它在应用中体现了灵活多样的操作,提高了使用效率。
5).简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特
点尤为突出和重要。
如矩形、三角形也同样工作。
2).可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他
特性的运行和操作。实际上新加子类更容易获得多态功能。
3).接口性:多态是父类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的
4).灵活性:它在应用中体现了灵活多样的操作,提高了使用效率。
5).简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特
点尤为突出和重要。
访问器
get
有返回值
public int getNum(){returen num;}
set
无返回值
public void setNum(int num){this.num = num;}
this super关键字
this:指代本类对象
this():构造器重用,调用本类中的构造方法
super:指代父类对象
super():调用父类中的构造方法
this():构造器重用,调用本类中的构造方法
super:指代父类对象
super():调用父类中的构造方法
每个构造函数的第一行都是super(),括号里可以填写参数,根据父类的构造函数来决定,如果不传参数
可以不写,默认有一个super()
*在继承关系中,初始化顺序为先父后子
可以不写,默认有一个super()
*在继承关系中,初始化顺序为先父后子
方法的重写
重写(覆盖、覆写):在继承关系中,子类中出现和父类中重名的方法(方法名相同,参数列表也相同)
则称为重写,调用时执行的是子类重写的方法
*@Override注解:老版的jvm需要此注解标注重写的方法,新版可以不用,但是为了规范需要加上
则称为重写,调用时执行的是子类重写的方法
*@Override注解:老版的jvm需要此注解标注重写的方法,新版可以不用,但是为了规范需要加上
重写规则
a.访问权限允许放大,不允许缩小
b.方法的返回值类型可以改,但是不允许随意修改,只可以改成原类型的子类型
c.参数列表的类型不允许改,参数名可以改,顺序不可以修改
b.方法的返回值类型可以改,但是不允许随意修改,只可以改成原类型的子类型
c.参数列表的类型不允许改,参数名可以改,顺序不可以修改
方法的重载
在一个类中出现重名方法但是参数列表不同,在调用期间根据传入的参数的类型来调用不同的
方法叫做方法的重载
方法叫做方法的重载
抽象abstract
抽象类
被abstract修饰的类
public abstract class Demo{}
a.抽象类有构造函数,但是不能直接用new关键字调用来创建对象,但是子类在创建对象时
父抽象类的构造函数会执行
b.抽象类中可以有抽象方法,也可以有非抽象方法,非抽象类只能有非抽象方法
c.抽象类如果需要使用必须由子类继承他来使用,并且子类必须重写父类的抽象方法
d.抽象类不能被final关键字修饰
c.抽象类中可以定义成员属性
*抽象类就是类,多了一个抽象的特性,不能被new
父抽象类的构造函数会执行
b.抽象类中可以有抽象方法,也可以有非抽象方法,非抽象类只能有非抽象方法
c.抽象类如果需要使用必须由子类继承他来使用,并且子类必须重写父类的抽象方法
d.抽象类不能被final关键字修饰
c.抽象类中可以定义成员属性
*抽象类就是类,多了一个抽象的特性,不能被new
作用
1.用来定义规范,强制性要求子类必须要有的方法
2.从设计类角度来讲这样设计更合理
3.从以后你们改代码的角度来讲更好改
4.利用抽象类可以实现面向对象的第三个特征:多态
2.从设计类角度来讲这样设计更合理
3.从以后你们改代码的角度来讲更好改
4.利用抽象类可以实现面向对象的第三个特征:多态
抽象方法
被abstract修饰的方法
public abstract void copy()
接口
接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这
些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)
些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)
*实际上还是java文件,但是不在用class修饰,而是用interface修饰,javac命令编译出的文件还是.class
a.接口中的方法只能是抽象方法
b.接口中方法默认是public abstract 修饰,即使不加这些关键字,虚拟机也会默认添加
c.接口中只能定义public static final 的属性,即使public static final不写,虚拟机
会默认添加,并且需要显式初始化
d.接口中没有构造函数,非静态代码块,静态代码块这些东西
e.接口必须由类实现来使用,并且接口不可以实现和继承类
f.接口和接口之间可以继承,并且可以多继承
g.一个类也可以实现多个接口
h.接口不能直接实例化使用,只能通过其子类使用
i.当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类
b.接口中方法默认是public abstract 修饰,即使不加这些关键字,虚拟机也会默认添加
c.接口中只能定义public static final 的属性,即使public static final不写,虚拟机
会默认添加,并且需要显式初始化
d.接口中没有构造函数,非静态代码块,静态代码块这些东西
e.接口必须由类实现来使用,并且接口不可以实现和继承类
f.接口和接口之间可以继承,并且可以多继承
g.一个类也可以实现多个接口
h.接口不能直接实例化使用,只能通过其子类使用
i.当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类
继承接口时 如果同时继承类 类要卸载接口前面
父类的引用指向子类的对象
将子类型的引用赋值给父类型的引用
例:Person p = new Teacher();
将子类型的引用赋值给父类型的引用
例:Person p = new Teacher();
向上向下转型
1).向上转型:子类型转成父类型,不需要强转,隐藏拓展的属性和方法
2).向下转型:父类型转子类型,需要强转,释放拓展的属性和方法
*.此处不要忘记对象的本质类型,不是所有的父类型都可以转成子类型
2).向下转型:父类型转子类型,需要强转,释放拓展的属性和方法
*.此处不要忘记对象的本质类型,不是所有的父类型都可以转成子类型
static关键字
静态修饰符,被static修饰的优先加载
静态不能修饰类(可以修饰内部类),可修饰方法和属性(成员)
a.被static修饰的属性和方法优先加载
b.被static修饰的属性和方法可以直接通过类名调用(打破面向对象的思想)
*可以通过对象去调用
c.所有类的对象共用静态属性
d.静态方法里不允许使用this和super关键字(上升到类级别)
e.静态方法绝对不存在重写一说
b.被static修饰的属性和方法可以直接通过类名调用(打破面向对象的思想)
*可以通过对象去调用
c.所有类的对象共用静态属性
d.静态方法里不允许使用this和super关键字(上升到类级别)
e.静态方法绝对不存在重写一说
静态代码块
static{}
final关键字
最终修饰符
a.被final修饰的属性在初始化时必须有初始值,而不是虚拟机默认添加的值,
并且后续不能更改此变量的值,常称之为常量
b.被final修饰的方法不可以被子类重写
c.被final修饰的类不可以被继承
d.final不能修饰抽象类和抽象方法
并且后续不能更改此变量的值,常称之为常量
b.被final修饰的方法不可以被子类重写
c.被final修饰的类不可以被继承
d.final不能修饰抽象类和抽象方法
加载顺序
父类静态-子类静态-父类非静态-子类非静态
*在一个类中的加载顺序
静态优先
静态的加载顺序是从上到下
非静态在后
非静态的加载顺序是先属性后方法
静态先于非静态
父先于子
*在一个类中的加载顺序
静态优先
静态的加载顺序是从上到下
非静态在后
非静态的加载顺序是先属性后方法
静态先于非静态
父先于子
object
1).equals():方法,在Object类中的写法使用==判断,如果我们需要改逻辑重写他
2).hashcode():在Object中计算对象的哈希值,可以重写
3).tostring():在输出引用时隐式调用tostring方法,想改逻辑请重写
2).hashcode():在Object中计算对象的哈希值,可以重写
3).tostring():在输出引用时隐式调用tostring方法,想改逻辑请重写
*==判断内存中的地址
*equals判断的结果根据重写的代码得到的结果
*equals判断的结果根据重写的代码得到的结果
集合
List
属于List接口的实现类
特点:
有下标,通过下标可以取出任意位置的值
有顺序,插入顺序
实现原理:
底层包装数组,实现对数组的操作,简化我们对数组的操作
思考:
1.ArrayList为什么使用Object数组而不使用别的类型
2.ArrayList中的数组是多长
*初始化时数组长度为0,在添加方法中对数组进行容量判断和扩容
*提供了可传长度的构造方法
api:
add(E e):将e添加到此集合中末尾的位置
add(int index, E element):将element添加到指定位置
get(int index):取出指定下标位置的值
remove(int index):删除指定下标位置的值,并且返回被删除的值
set(int index, E element):使用element替换index位置的值
size():返回此集合中元素的个数
使用场景:
1.用来替换数组
2.查看数据快,存数据和插入数据稍慢一些
特点:
有下标,通过下标可以取出任意位置的值
有顺序,插入顺序
实现原理:
底层包装数组,实现对数组的操作,简化我们对数组的操作
思考:
1.ArrayList为什么使用Object数组而不使用别的类型
2.ArrayList中的数组是多长
*初始化时数组长度为0,在添加方法中对数组进行容量判断和扩容
*提供了可传长度的构造方法
api:
add(E e):将e添加到此集合中末尾的位置
add(int index, E element):将element添加到指定位置
get(int index):取出指定下标位置的值
remove(int index):删除指定下标位置的值,并且返回被删除的值
set(int index, E element):使用element替换index位置的值
size():返回此集合中元素的个数
使用场景:
1.用来替换数组
2.查看数据快,存数据和插入数据稍慢一些
子主题
Set
特点:
无序、不重复
HashSet的实现是利用里面的HashMap的key存值,value被存成了一个固定的Object
HashSet判断hashCode如果不相等,认为不重复,如果hashCode相等再去判断equals,equals如果要是也相等
就相等
作用:
给list集合去重复
遍历map集合
无序、不重复
HashSet的实现是利用里面的HashMap的key存值,value被存成了一个固定的Object
HashSet判断hashCode如果不相等,认为不重复,如果hashCode相等再去判断equals,equals如果要是也相等
就相等
作用:
给list集合去重复
遍历map集合
子主题
Map
特点:
1.存储方式键值对
2.取值只能通过key
3.map集合的key都不允许重复
HashMap的实现原理
HashMap叫做哈希散列表,数组中放链表,取值很快o(1)
api:
put(K key, V value):向集合中存储值
get(Object key):取值
remove(Object key):删除值
size():返回集合中有多少个元素
遍历:
1.取key
2.取value
3.取整体
使用map的优点:
1.取值快
2.由于map集合是key-value形式,在查询、删除、修改都很方便
1.存储方式键值对
2.取值只能通过key
3.map集合的key都不允许重复
HashMap的实现原理
HashMap叫做哈希散列表,数组中放链表,取值很快o(1)
api:
put(K key, V value):向集合中存储值
get(Object key):取值
remove(Object key):删除值
size():返回集合中有多少个元素
遍历:
1.取key
2.取value
3.取整体
使用map的优点:
1.取值快
2.由于map集合是key-value形式,在查询、删除、修改都很方便
子主题
泛型
jdk1.5新出的特性
<T>泛型,泛化的类型,也就是说在定义时不知道什么类型
*泛型在定义时不确定类型,在使用时必须确定类型
*泛型的默认是Object
*钻石运算符
<T>泛型,泛化的类型,也就是说在定义时不知道什么类型
*泛型在定义时不确定类型,在使用时必须确定类型
*泛型的默认是Object
*钻石运算符
子主题
迭代器
代码的组织能达到更好的效果
管子,从集合中抽取出来放到自己的管子中
java中foreach循环底层就是迭代器(在编译期就把foreach循环编译成了迭代器)
管子,从集合中抽取出来放到自己的管子中
java中foreach循环底层就是迭代器(在编译期就把foreach循环编译成了迭代器)
子主题
Collections是一个类,这个类中都是一些静态方法,用于操作集合
Collection与Collections有什么区别
Collection是list和set集合的父接口
Collections是一个操作集合的工具类
Collection与Collections有什么区别
Collection是list和set集合的父接口
Collections是一个操作集合的工具类
子主题
八种基本数据类型的包装
byte -> Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
子主题
异常
1.编译异常
在使用javac命令编译源文件的时候有可能会发生
2.运行时异常
在运行时发生的不合逻辑的异常
a.exception:可处理异常
b.error:不可处理异常
堆栈内存溢出
在使用javac命令编译源文件的时候有可能会发生
2.运行时异常
在运行时发生的不合逻辑的异常
a.exception:可处理异常
b.error:不可处理异常
堆栈内存溢出
子主题
处理异常的几种方式
1.抛出异常
throw:抛出异常对象
我们自己定义一些工具类时去使用
throw new RuntimeException();
2.捕获异常
try{
//放要发生异常的代码
}catch (Exception e){
//当异常发生之后执行什么
}finally{
//无论怎样都会执行的语句块
}
try:捕获异常
catch:捕获什么类型的异常
3.throws
向上声明抛出的异常类型
throws RuntimeException
*在java中,异常可以进行捕获也可以抛出
1.抛出异常
throw:抛出异常对象
我们自己定义一些工具类时去使用
throw new RuntimeException();
2.捕获异常
try{
//放要发生异常的代码
}catch (Exception e){
//当异常发生之后执行什么
}finally{
//无论怎样都会执行的语句块
}
try:捕获异常
catch:捕获什么类型的异常
3.throws
向上声明抛出的异常类型
throws RuntimeException
*在java中,异常可以进行捕获也可以抛出
子主题
自定义异常
1.创建一个类,让这个类继承自Throwable
2.java中异常也分为检查异常和非检查异常
*所有RuntimeException的子类都属于非检查异常,其他的都属于检查异常
*java中的检查异常要么继续向上抛出,要么捕获
为什么非检查异常不强制处理和抛出
IndexOfBoundsException:下标越界
NullPointException:空指针异常
1.创建一个类,让这个类继承自Throwable
2.java中异常也分为检查异常和非检查异常
*所有RuntimeException的子类都属于非检查异常,其他的都属于检查异常
*java中的检查异常要么继续向上抛出,要么捕获
为什么非检查异常不强制处理和抛出
IndexOfBoundsException:下标越界
NullPointException:空指针异常
子主题
io流
也是jdk里的一些类
整个io包下的类负责处理系统中(网络)的文件(创建、删除文件,读取文件内容,向文件内写入内容)
整个io包下的类负责处理系统中(网络)的文件(创建、删除文件,读取文件内容,向文件内写入内容)
子主题
0 条评论
下一页
为你推荐
查看更多
抱歉,暂无相关内容