JAVA
java语言初识:
java背景:
-
1972年c诞生,1982年c++诞生,1995年java诞生。
-
三高;高可用,高性能,高并发
-
javaSE,javaME,javaEE,2006年Hadoop大数据,2008Android手机端
JDK:
开发者工具包–>配置环境变量
JRE:
运行环境
第一个Hello World文件:
java hello.java -->生成class
java先编译,到操作系统之后再解释
编译型语言
解释型语言
基础语法
注释
-
行内注释//
-
多行注释/**/
-
文档注释/** */
- javadoc生成帮助文档
标识符---->关键字
数据类型
-
强类型语言:要求变量的使用严格符合规定,所有变量都必须先定以后才能使用。(安全性高,速度慢)
-
弱类型语言:可以不符合规定
基本数据类型(primitive type)
- 整数
- byte 1字节
- short 2字节
- int 4字节
- long 8字节
- 0b二进制
- 0x 十六进制
- 0八进制
- 浮点数
- fliat 4字节
- double 8字节
- BigDecimal
- 字符
- char 2字节
- 布尔值–>boolean 1字节
- 编码:
- ASCLL
- Unicode
- utf-8
引用数据类型(reference type)
-
类
-
接口
-
数组
类型转换
-
自动类型转换
- 低转高
-
强制类型转换
- 高转低
变量和常量
-
变量:就是可以变化的量
-
java是一种强类型语言,每个变量都必须声明起类型
-
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
注意:
-
每个变量都有类型,类型可以是基本类型,也可以是引用类型
-
变量名必须是合法的标识符
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
作用域
-
类变量
-
实例变量
-
局部变量
常量
-
初始化后不能在改变值(不会变动的值),用final修饰的
-
final MAX A = 10;
命名规范:
-
1、见名知意
-
2、驼峰命名(变量,方法)
-
3、类:首字母大写,驼峰命名
-
4、常量:大写+下划线
-
5、不要使用拼音命名
运算符
-
常用运算符
- +、-、*、% 、 ++、–
-
赋值运算符
- =
-
关系运算符
- <、>、>=、 <=、==、!=、instanceof(instanceof 通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例)。
-
逻辑运算符
- &&:逻辑与运算,两个变量都为真,结果才为true
- ||:逻辑或运算,两个变量都有一个为真,则结果才为true
- ! :如果是真,则变为假,如果是假则变为真
- 短路运算
-
位运算符
- & | ^ ~ >> << >>>
* A = 0010 1100
* b = 0000 1101
*A&B = 0000 1100 两个都是0就是0 两个都是1就是1,否则为0
*A|B = 0011 1101 两个都是0就是0,两个有一个1就是1,有两个1也是1,否则为0
*A^B = 0011 0001 如果这两个位置相同则为0。否则为1
*A~B = 1111 0010
-
条件运算符
- ? : (三目运算符)
- 这是“三目”运算。 (式1)?(式2) : (式3)
式1 是条件表达式,
当式1 为真时,“三目”运算 的结果等于 式2 的 值,
当式1 为假时,“三目”运算 的结果等于 式3 的 值。
-
拓展运算符
- +=、-=、*=、/=
包机制
- 为了更好地组织类,java提供了包机制,用于区别类名的命名空间(包的本质就是文件夹
- 一般利用公司域名倒置作为包名
- 为了能够使用某一个包的成员,我们需要在java程序中明确导入该包,使用import语句可以完成此功能
- .*(通配符)代表导入这个包的所有东西
域名倒写
-
防止命名冲突
-
package
-
import
javaDoc
-
jdk帮助文档
javadoc:
@a名字
@version
@since
@parem
@return
@throw
流程控制
- java用户交互的目的是实现程序与人的交互;一般通过Scanner来获取用户的输入;java.util.Scanner 是Java5的新特征。
- 我们可以通过Scanner类的next()与nextLine()方法获取用户输入的数据,而在获取之前可以通过hasNext()与hasNextLine判断是否有输入的数据。
顺序结构
- 默认的结构,自上而下的执行
选择结构
-
if单选择结构
-
if双选择结构
-
if-else if=else多选择结构
-
swith–>jdk支持了String类型,case穿透现象,break,default
-
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在swith语句中使用)
-
return:结束方法的执行
-
continue语句用在循环语句体中,用于种植某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
-
goto关键字:很早就在程序设计语言中出现。尽管goto仍是java的一个保留字,但并未在语言中得到证实使用;java没有goto。然而,在break和continue者两个关键字的身上,我们仍然能看出一些goto的影子…带标签的break和continue。“标签“是指后面跟一个冒号的标识符,例如:lable:
-
对java来说唯一用到标签的地方实在循环语句之前,而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只终端当前循环,但是若随同标签使用,他们就会中断存在标签的地方。
循环结构
-
whith:尽量避免死循环
-
do…whith
-
for:for(int i= 0,i<100;i++)
-
增强for循环
方法
方法的定义 :
- 修饰词 返回值 方法名(参数名)
(return返回值;)
方法的调用:
-
类名方法
-
对象方法
方法重载
-
名字相同,参数列表不同
-
重载就是在一个类中有相同的函数名称,但形参不同的函数
规则:
-
方法名称必须相同
-
参数列表必须不同(个数不同,或类型不同、参数排列顺序不同等)
-
方法的返回类型可以想通也可以不同
-
仅仅返回类型不同不足以成为方法的重载
**实现理论:**方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
命令行传参
- 给main(方法传递参数)
可变长参数
- …要求:必须放在最后一个参数
递归
-
自己调用自己,给自己一个出口。
-
利用递归可以用简单的程序解决一些复杂的问题,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量,递归的能力在于用有限的语句来定义对象的无限集合。
递归包含两个部分:
-
递归头:什么时候不调用自身方法,如果没有头,将陷入死循环。
-
递归体:什么时候需要调通自身方法
-
面试常问
数组
数组:
-
必须是同一类型,通过下标拿到值,ArrayindexoutoBounds(数组下标越界)
-
增强for循环遍历
-
二维数组:int[][]
Arrays工具类
排序
-
冒泡排序
-
选择排序
-
插入排序
-
快速排序
-
归并排序
-
希尔排序
-
堆排序
-
基数排序
面向对象
- 什么是面向对象:任何事物都可以看成对象
类与对象:
- 类是对象的抽象,对象是类的具体,类是模版class
构造方法:
-
构造重载。必须要有无参构造,如果手动定义了有参构造,就必须手动一个无参构造
-
单例模式:需要构造器私有
new 对象:
-
栈存放引用
-
栈存放具体的对象
封装:
-
高内聚:就是类的内部数据操作细节字节完成,不允许外部干涉
-
低耦合:仅暴露少量的方法给外部使用
-
属性私有get,set
继承:
-
extends
-
Object
子类拥有父类的全部特性
方法重写:需要有继承关系,子类重写父类的方法
1、方法名必须相同
2、参数列表必须相同
3、修饰符:翻位可以扩大 piblic>protected>default>private
4、抛出的异常可以缩小,但不能扩大
-
this
-
super
-
java是单继承,只能继承一个父类
多态:
注意事项:
1、多态是方法的多态,属性没有多态
2、父类和子类,有联系。类型转换异常classcastException
3、存在的条件:继承关系,方法需要重写,父类的引用指向子类对象
-
一个对象的实际类型是确认的
-
父类的引用指向子类的对象Person person = new Student();
-
instanceof:关键,如果匹配,可以进行类型之间的转换
修饰符:
-
public
-
protevted
-
private
-
static
-
final
-
abstract
接口
-
interface
-
约束,只能定义方法名
-
子类实现接口,必须重写其中的方法
-
只有一个方法的接口叫做函数式接口,可以使用lanbda表达式简化
-
接口比抽象类更抽象
-
一个类可以实现多个接口
内部类
-
成员内部类
-
局部内部类
-
静态内部类
-
匿名内部类:没有名字初始化类,不用讲实例保存到变量中
异常
Throwable:
-
Excepion:运行时异常,检查性异常
-
Error:AWT,jvm错误
- StackOverFlow
- OutOfMemory
五个关键字
-
try ctrl+alt+t
-
catch
-
finally
-
throw:手动抛出异常
-
throws:方法抛出异常
自定义异常
- 继承Exception
常用类
- Object类
- hashcode()
- tostring()
- clone()
- getClass()
- notify()
- wait()
- equals()
- Math类
- 数学运算
- Random类
- 生成随机数 UUID
- File类
- 创建文件
- 查看文件
- 修改文件
- 删除文件
- 包装类
- 自动装箱和拆箱
- Date类
- Date
- SimpleDateFormat----->yyyy-MM-dd HH:mm :ss
- Calender(建议使用)
- String类 操作量较少
- 不可变性final
- StringBuffer类
- 可变长—>append()—>多线程数据量较大
- StringBuilder类
- 可变长—>单线程数据量较大—>效率高,不安全
- String str = ”a“+ 1+2
- String str = ‘a’+1+2
- String str = 1+2+‘a’
集合框架
-
Collextion
-
List (有序,可以重复)
ArrayList :add、remove、contains、size
LinkedList:getFirst、getLast、removeFirst、addFirst…
Vector
Stack
-
Set(无须,不可重复)
HashSet
TreeSet
-
-
Map
- HashMap(重点,天天用)
- TreeMap
-
Collections
-
泛型<>约束,避免类型转换之间的问题