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