Java帮助文档
百度搜索jdk在线文档
JavaDoc
-
Javadoc命令是用来生成自己的API文档的
jvavadoc 参数 Java文件
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
-
参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值
- @throws 异常抛出情况
-
使用IDEA生成JavaDoc文档
**实质:**在代码编写过程中,按照JavaDoc的主食要求,为需要暴露给使用者的类、方法以及其他成员编写注释。
步骤:
-
Tool->GEnerate JavaDoc 里面
-
Local可选填项,建议填写zh_CN
-
“Other command line arguments”可选项,很重要。填写的内容为直接向javadoc,exe传递的参数内容,因为有一些重要的设置,只可以通过直接参数形式向javadoc.exe传递:
-encoding UTF-8 -charset UTF-8 -windowtitle “接口文档3.4” -link http://docs.Oracle.com/javase/7/docs/api
-
Java流程控制
(一)用户交互Scanner
-
作用:获基本语法取用户输入
-
基本语法
Scanner scanner = new Scanner(System.in);
-
用法:
- 通过Scanner类的next()与nextLine()方法获取输入的字符串
- 在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
-
注意:
- 使用完记得关闭;
- 凡是属于IO流的类如果不关闭会一直占用资源,
- scanner.close();
(二)顺序结构
- 任何一个算法都离不开的一种算法结构。语句与语句之间,框与框之间是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的。
(三)选择结构
if单选择结构
if双选择结构
if多选择结构
嵌套的if结构
switch多选择结构
- 语法结构
switch(exception){
case value:
//语句
break;//可选
case value:
//语句
break;//可选
//可以有任意数量的case语句
default://可选
//语句
}
- switch语句中的变量类型可以是:
- byte、short、int 或者 char
- 从Javase7开始switch支持字符串String类型了,同时case标签必须为字符串常量或字面量。
- case穿透,加break。
(四)循环结构
while循环
do while循环
- 至少会执行一次
- while先判断后执行,do while是先执行后判断。
- do while总是保证循环体至少执行一次
for循环
- for循环语句是支持迭代的一种通用结构,最有效、最灵活的循环结构。
- for循环的执行次数是在执行前就确定的
- for循环快速生成方式
- 100.for
在Java5中引入了一种主要用于数组的增强型for循环
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与数组元素的值相等。
-
表达式:表达式是要访问的数组名,过着是返回值为数组的方法。
for(声明语句:表达式){ //代码块 } //例如 int[] numbers = {10,20,30,40,50}; for(int x:numbers){ System.out.println(x); }
(五)break&continue
- break 在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
- continue语句用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着执行下一次是否执行循环体的判定。
Java方法
(一)方法
- Java方法是语句的集合,他们在一起执行一个功能
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
- 设计方法的原则:
- 方法的本意是功能块,就是实现某一个功能的语句块的集合
- 设计方法的时候最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展
- 一个方法包含的语法
- 修饰符
- 返回值类型
- 方法名
- 参数类型
- 方法体
- 方法分类
- 静态方法
- 非静态方法
(二)方法的定义及调用
- 方法的定义
- 修饰符
- 返回类型
- break
- 方法名
- 参数列表
- 实际参数和实行参数类型一致
- 异常抛出
- 方法的调用
- 静态方法
- static
- j静态方法static和类一起加载
- 非静态方法是在类实例化之后才存在
- 非静态方法
- 形参和实参
- 值传递和引用传递
- 值传递只是传递一个数值
- 引用传递是传递对象,本质还是值传递
- this关键字
- 静态方法
(三)方法重载
- 定义:重载就是在一个类中,有相同的函数名称,但相残不同的函数
- 方法重载规则:
- 方法名称必须相同
- 参数列表必须不同(个数、类型、排列顺序)
- 方法的返回值类型可以相同也可以不同。
- 仅仅返回类型不同不足以成为方法的重载。
- 实现理论:
- 方法名称相同时,编译器会根据调用方法的参数个、参数类型等逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错。
- 数组越界异常
- Arrayindexoutofbounds
(四)命令行传参
(五)可变参数
- jdk1.5开始,Java支持传递同类型的可变参数给一个方法。
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在他之前声明。
(六)递归
- 递归可以用简单的程序来解决一些复杂的问题。他通常只需要把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
- 递归包括两部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
- 递归体:什么时候需要调用自身方法。
Java数组
面向对象
(一)类与对象的创建
(二)构造器详解
- 使用new关键字创建对象
- 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化 以及 对类中构造器的使用。
- 类中的构造器也称为构造方法,实现在进行创建对象的时候必须要调用的。 并且构造器有一下两个特点。
- 必须和类的名字相同
- 必须没有返回值类型,也不可以写void
- 实例化初始值
- 使用new关键字本质是在调用构造器;用来初始化值
- 有参构造:一旦定义了有参构造,参数就必须显示定义
- alt+inster生成构造器
- 构造器
- 和类名相同;
- 没有返回值
- 作用:new本质在调用构造方法;初始化对象的值
- 注意点:定义有参构造之后,如果使用无参构造,显示定义一个无参构造;
(三)创建对象内存分析
- 类与对象
- 方法
- 定义、调用
- 对象的引用
- 引用类型:基本类型(8)
- 对象使用过引用来操作的
- 属性
- 字段field 、 成员变量
- 默认初始化
- 数字,0、0.0
- char:u0000
- Boolean:false
- 引用:null
- 修饰符 属性类型 属性名 = 属性值;
- 对象的创建和使用
- 必须使用new关键字创建对象,构造器
- 对象的属性
- 对象的方法
- 类
- 静态的属性 属性
- 动态行为 方法
(四)封装
- 该露的露,该藏的藏
- 高内聚:类内部数据操作细节自己完成,不允许外部干涉
- 低耦合:仅暴露商量的方法给外部
- 封装:数据隐藏
- 通常禁止直接访问一个对象中的数据点实际表示,而应通过操作接口来访问,这称为信息隐藏
- 属性私有,get、set
- 作用:
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 系统可维护增加了
(五)继承
- 继承的本质就是对一批类的抽象
- extends的意思是扩展,子类是父类的扩展
- Java中只有单继承,没有多继承
- 继承是类和类之间的一种关系,除了继承还有依赖、组合、聚合等
- 子类继承了父类,就会有父类的所有方法;
- public、protect、default、private
- 一般属性才是私有的
- Ctrl+h:
- 在Java中,多有的类都默认直接或者间接继承object
- object类
- super
(六)Super详解
- 私有的东西无法被继承
- 调用父类的构造器必须在子类构造器的第一行;super()
- 重写了无参构造之后,一般都要把无参构造显示写出来
- super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
- VS this
- 代表的对象不同:
- this:本身调用这个对象
- super:代表父类对象的应用
- 前提:
- this:没有继承也可以使用
- super:只能在继承条件下才可以使用
- 构造方法:
- this();本类的构造
- super():父类的构造
- 代表的对象不同:
(七)方法重写
-
重写都是方法的重写,和属性无关
-
父类的引用指向了子类
-
@Override : 有功能的注释
-
静态方法和非静态方法区别很大
- 静态方法:方法的调用只和左边定义的数据类型有关
- 非静态方法
-
注意:
- 重写需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大,但是不能缩小:public》Protected》default》private
- 抛出的异常:范围可以被缩小,但是不能被扩大
- 重写:子类的方法和父类必须要一致,方法体不同;
- 为什么需要重写
- 父类的功能,子类不一定需要,或者不一定满足
- Alt+insert:override
- 重写需要有继承关系,子类重写父类的方法
-
代码案例
//F1:静态方法 public class B{ public static void test(){ System.oout.println("B=>test()"); } } public class A{ public static void test(){ System.oout.println("A=>test()"); } } public class Application{ A a = new A(); a.test(); //父类的引用指向了子类 B b = new A(); b.test(); } 结果: A=>test() B=>test() //F2 public class B{ public void test(){ System.oout.println("B=>test()"); } } public class A{ @Override //重写 public void test(){ System.oout.println("A=>test()"); } } public class Application{ A a = new A(); a.test(); B b = new A(); b.test(); } 结果: A=>test() A=>test() 重写只和非静态方法有关 静态方法只能被继承,不能被重写 静态方法是类的方法,而非静态是对象的方法 没有static时,b调用的是对象的方法,而b是用A类new出来的 有static时,b调用了B类的方法,因为b是用B类定义的, 重写的关键词只可以是公有的
(八)多态
-
同一个方法可以根据发送对象的不同而采用多种不同的行为方式
-
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多
-
多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
-
多态是方法的多态,属性没有多态性
-
instanceof
-
举例
student继承person student能调用的方法都是自己的或者继承父类的 person父类型,可以指向子类,但是不能调用子类独有的方法 Student s1 = new Student(); Person s2 = new Student(); Object s3 = new Student(); 对象可以执行那些方法,主要看对象左边的类型,和右边的关系不大
-
多态注意事项总结:
- 多态是方法的多态,属性没有多态
- 父类和子类有联系,如果不符合的话就会报类型转换异常 ClassCastException!
- 多态存在的条件:继承关系、方法需要重写、父类引用指向子类对象
- static方法属于类,他不属于实例;final是常量;private方法
(九)instanceof和类型转换
- 子类转换为父类,可能会丢失自己本来的一些方法
- 总结:
- 父类引用指向子类对象
- 把子类转换为父类,向上转型
- 把父类转换成子类,向下转型,强制转换
- 方便方法的调用,减少重复的代码
(十)static关键字详解
-
执行顺序
静态方法——》匿名代码块——》构造方法
-
静态代码块只执行一次
-
匿名代码块可以赋初始值
(十一)抽象类
- 抽象类的所有方法,继承了他的子类,都必须要实现他的方法
- Java类单继承,接口可以多继承
- 注意:
- 不能new抽象类,只能靠子类去实现他:约束!
- 抽象类中可以写普通方法
- 抽象方法必须在抽象类中
- 抽象的抽象——约束
- 思考题:
- 存在构造器吗
- 抽象类的存在意义,抽象出来,提高开发效率
(十二)接口
- 区别:
- 普通类:只有具体实现
- 抽象类:具体实现和规范(抽象方法)都有
- 接口:只有规范,自己无法写方法,专业约束,约束和实现分离:面向接口编程。
- 接口就是规范,定义的是一组规则
- 接口的本质是契约
- OO的精髓是对对象的抽象,最能体现这一点的就是接口。
- 接口中的所有定义其实都是抽象的 public abstract
- 接口都需要实现类, implements
- 接口作用总结
- 约束
- 定义一些方法,让不同的人实现
- 方法都是public abstract
- 常量都是public static final
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 实现接口必须要重写里面的方法
(十三)内部类
-
内部类就是在一个类中定义一个类,比如,A类中定义一个B类,那么B类想对A类来说就称为内部类,而A类相对于B类就是外部类
-
分类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
-
代码
public class Outer{ private int id = 10; public void out(){ System.out.println("这是一个外部类方法"); } public class Inner{ public void in(){ System.out.println("这是一个内部类方法"); } //获得外部类的私有属性 public void getID(){ System.out.println(id); } } } //静态内部类无法直接访问非静态的属性 public class Application{ public static void main(String[] args){ Outer outer = new Outer(); //通过这个外部类来实例化内部类 Outer.Inner inner = outer.new Inner(); inner.getID(); } }
-
一个Java文件中可以有多个class类,但是只能有一个public class
-
代码:局部内部类
-
匿名内部类
- 没有名字初始化类,不用将实例保存到变量中
异常
(一)error和exception
- 什么是异常
- 异常是程序运行过程中出现的不期而至的各种状况。
- 异常发生在程序运行期间,他影响了正常的程序执行流程
- 异常体系结构
- 分类
- 检查性异常:用户错误或问题引起的异常,是程序员无法预见的
- 运行时异常:可能被程序员避免的异常,可以在编译时被忽略
- 错误:不是异常,而是脱离程序员控制的问题,在编译时也检查不到
- error
- error对象由Java虚拟机生成抛出,大多数错误与代码编写者所执行的操作无关
- Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
- 还有发生在虚拟机试图执行引用是,如类定义错误、链接错误。这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数程序运行时不允许出现的状况
- exception:
- RuntimeException:运行时异常
- 数组越界异常
- 空指针异常
- 算数异常
- 丢失资源
- 找不到类
- 。。。。。。
- 这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生
- error和exception的区别
- error是灾难性的致命错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;
- Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能地去处理这些异常。
- 分类
- Java异常处理机制
- 处理异常
- 自定义异常
- 总结
(二)捕获和抛出异常
- 假设要捕获多个异常,需要从小到大
- 快速包裹异常快捷键:Ctrl+alt+t
- 假设这个方法中处理不了这个异常,方法上跑出来异常
- 主动是throw 方法上是throws
- 异常处理五个关键字:
- try
- catch
- finally
- throw
- throws
(三)自定义异常
- 用户自定义异常类,只需要继承exception类即可
- 在程序中使用自定义异常类,步骤:
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常对象
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法声明处通过throes关键字指明要抛出给方法调用者的异常,基础进行下一步操作
- 在出现异常方法的调用者中捕获并处理异常。
- 实际应用中的经验总结:
- 处理运行异常时,采用逻辑去合理规避,同时辅助try-catch处理
- 在多重catch块后面,可以加一个catch(exception)来处理可能会被一楼的异常
- 对于不确定的代码,可以加上try-catch,处理潜在的异常
- 尽量去处理异常,切记只是简单地调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量使用finally语句去释放占用的资源
- alt+enter 自动提示
JavaSE总结
(一)数据类型
- 基本数据类型
- 整数
- byte 1字节
- short 2字节
- int(默认)4字节
- long 8字节
- 0b二进制;0x十六进制;0八进制;
- 浮点数
- float 4字节
- double (默认)8字节
- BigDecimal
- 字符
- char 2字节
- ascii
- utf-8 3字节
- Unicode 2字节
- '\u000’转义字符
- 布尔值
- Boolean 1位
- 整数
- 引用数据类型
- 类
- 接口
- 数组
(二)转换类型
- 自动类型转换
- 强制类型转换
(三)变量和常量
- 作用域:类变量、实例变量、局部变量
- 常量:final MAX_A = 10;
- 命名规范
- 见名知意
- 驼峰命名法:变量和方法
- 类,首字母大写,驼峰命名
- 常量:大写+下划线
- 不要使用拼音命令
- 运算符
- 算数运算符: + - * / % ++ –
- 赋值运算符: =
- 关系运算符:> ,< , <=, >=, == , !=, instanceof
- 逻辑运算符: && || !
- 位运算符: & | ^ ~ >> << >>>
- 条件运算符: ? :
- 扩展运算符: += -= *= /=
(四)包机制
- 域名倒写
- 防止命名冲突
- packaege
- import
(五)JavaDoc
- JDK帮助文档
- JavaDoc
- @author
- @Version
- @Since
- @param
- @return
- @throes
(六)流程控制
- Scanner
- 顺序结构
- 选择结构
- if但选择结构
- if else 双选择结构
- if else if-else 多选择结构
- switch
- jdk支持了String类型
- case穿透现象
- break
- default
- 循环结构
- while
- do while
- for
- 增强for循环
(七)方法
- 什么是方法:方法是语句块的结合
- 方法的定义:修饰符 返回值 方法名(参数名)
- 方法调用
- 类名.方法
- 对象.方法
- 方法重载
- 命令行传参:给main方法传递参数
- 可变长参数
- 递归
- 自己调用自己,给自己一个出口
- 面试常问:力扣刷题;
(八)数组
- 数组的定义
- 数组的使用
- 通过下标拿到值
- ArrayIndexoutofBounds
- 增强for循环遍历
- 二维数组
- Arrays工具类
- 排序算法
- 冒泡排序
- 选择排序‘
- 插入排序
- 快速排序’
- 递归排序
- 希尔排序
- 堆排序
- 技术排序
(九)面向对象
- 什么是面向对象
- 类与对象
- 构造方法
- new对象
- 封装:属性私有
- 继承:
- extends
- Object
- 子类拥有父类的全部特性‘
- 方法重写
- this
- super
- 继承是单继承
- 多态
- 父类的引用指向子类的对象
- instanceof关键,如果匹配,可以进行类型之间的转换
- 修饰符
- public,protected,private,static,abstract,final
- 接口
- interface
- 约束,只能定义方法名
- 只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化
- 一个类可以实现多个接口
- 内部类
- 局部内部类
- 静态内部类
- 匿名内部类
(十)异常
(十一)常用类
- Object
- hashcode()
- toString()
- clone()
- getClass()
- notify()
- wait()
- equals()
- Math
- 常见的的数学类
- Random
- 生成的随机数 UUID
- File
- 创建文件
- 查看文件
- 修改文件
- 删除文件
- 包装类’
- 自动装箱和拆箱
- Date
- Date
- SimpleDateFormate
- Calender(建议使用)
- String
- 不可变性 final
- StringBuffer
- 可变长 append
- 多线程数据量较大
- 效率低,安全
- StringBuilder
- 可变长
- 单线程数据量较大
- 效率高,不安全
- String str = “a”+1+2 a12
- String str = ‘a’+1+2 一个具体的数
- String str = 1+2+“a” 3a
(十二)集合框架
-
collection
-
list
- ArrayList(常用)
- add
- remove
- contains
- size
- LinkedLIst(常用)
- getFirst()
- getList
- removeFirst
- addFirst
- 。。。
- Vector
- stack
- ArrayList(常用)
-
set
-
HashSet(常用)
-
TreeSet
-
-
-
map
- HashMap(及其常用)
- JDK1.7:数组+链表
- JDK1.8: hash表 = 数组+链表+红黑树
- TreeMap
- HashMap(及其常用)
-
collections工具类
-
泛型<>约束,避免类型转换之间的问题