Java基础学习常见知识点
@author:HB、ocean
@time:2020-3-1
单词记录
- primitive type 基本类型
- reference type 引用类型
- heap 堆空间
- stack 栈空间
- operator 运算符
- cast 转换
- extends 继承
- instance 例子
- abstract 抽象
- interface 接口
- implements 实现
- exception 异常
idea快捷键
-
主方法 psvm 快捷键
public static void main(String[] args) {}
-
输出语句 sout 快捷键
System.out.println("");
-
对象的构造 **先new对象 后提示补全 **
Alt+Enter/Shift+灯泡
Person p = new Person("李四");
-
for循环 100.for 快速构造i从0到100的for循环 (fori 定义循环等)
for(int i=0;i<100;i++){}
-
增强for循环 for each 数组.for 快速构建增强for循环 遍历元素
for(int i:number) { System.out.println(i); }
-
Ctrl+D 复制当前行
-
Alt+Insert 快速生成类的方法 构造方法、verride等
-
Ctrl+H 打开继承树
-
Ctrl+鼠标左键 点出传参调用的参数名字
-
Ctrl+Alt+T 可包裹代码 捕获异常等
Java学习记录
Java基础
-
James Gosling(Canada人) 1995年推出 Java
- 起初 Applet图形界面程序(网页)
- 1988 J2SE 桌面 J2ME 手机 J2EE 服务器 高可用 高性能 高并发
- 2005 Ruby 快速构建
- 2006 Hadoop 大数据领域
- 2008 Android 手机端
-
可移植性 动态性 反射
-
添加 JAVA_HOME、path系统变量
-
Java 介于编译型与解释型之间
-
强语言类型 byte 1、short 2、int 4、long 8。char 2、float 4、double 8(boolean 占一位bit、一字节Byte占8位bit)
-
float有限、离散、大约接近但不等,避免使用浮点数进行比较 BigDecimal数学工具类表示
-
字符char 本质数字 Unicode编码 2字节 0~65536 、65=A、97=a 例:‘/u0061’是a
-
注意问题:内存溢出、精度丢失、计算默认int,先转型l/L
-
JDK7新特性,可用下划线分割 例:10_0000_0000
-
变量 实例变量、类变量、局部变量(布尔默认false 其余0,0.0,u0000,null)常量 final修饰(修饰符不分前后顺序)
-
取名 见名知意
-
类成员、局部变量、方法名 首单词字母小写后驼峰原则
-
常量 大写字母和下划线分隔
-
类名 首字母大写后驼峰原则
-
位运算效率高 (接近底层)<</>>
-
与或短路运算
-
字符串类型只能拼接后边
-
package放最上打包 import 引包 一般用公司域名倒置作为包名
-
java doc 命令生成API文档
/** */来书写
- @author 作者名
- @version 版本号
- @since 需最早jdk
- @param 参数名
- @return 返回值
- @throws 异常抛出
生成 javadoc-encoding UTF-8 - character UTF-8 *.java
-
Scanner类 JDK5新特性
Java流程控制
- 从JavaSE7开始switch支持String同时case必须是字符串常量/字面量(通过name.hashCode()来判断)
- 增强for循环JDK5新特性
- goto关键字 尽管goto是java保留字,但未正式使用,在break和continue上应用:带标签的break和continue,循环嵌套使用
- debug的使用 添加断点 小瓢虫运行调试
Java方法
-
方法的原子性 一个方法一个功能(有利于后期拓展)
-
return 0 常用来终止方法
-
方法的重载与返回值类型无关(与参数的类型、个数、顺序有关)
-
运行class文件需要找到包的路径去加载,可以命令行传参数(args[0]……)
-
JDK1.5开始支持可变参数(参数类型后面加入……、本质数组)一个方法仅支持一个可变长参数 在最后一个参数声明
-
递归 递归头和递归体 递归基数不易太大 能不用则不用 消耗栈资源
Java数组
-
三种初始化
//静态初始化 创建+赋值 int[] a = {1,2,3}; //动态初始化 包含默认初始化 int[] b = new int[3]; b[0] = 1;
数组的默认初始化 数组是引用类型 它的元素相当于类的实例变量,因此数组一经分配空间,其中每个元素也按照实例变量同样的方式被隐式初始化。
-
数组对象本身是在堆中
-
多维数组,即数组的数组不常用 (因为面向对象的思想)
-
数组工具类 java.util.Arrays,用static修饰的静态方法,可直接使用类名来调用,不用使用对象来调用。
-
**冒泡排序 时间复杂度O(n2)**比较相邻元素 每一次内层循环都产生当前最小数放后面,外层循环控制循环次数 每次内层循环减少。
- 内层添加flag判断 判断是否有改变
-
稀疏数组 一个数组存在大量相同元素 使用稀疏数组格式 (记录有效坐标与原始坐标的大小)
行 列 值 总行数 总列数 有效数值个数 有效数值所在行 有效数值所在列 有效数值具体值
面向对象编程OOP
-
以类的方式组织代码,以对象的组织(封装)数据
-
三大特性:封装 继承 多态
-
一个项目只存在一个main方法(main方法在栈中)一个.java只有一个public class
-
String预定义类不可变 当常量处理
-
类是一个模板 抽象 对象是一个具体的实例 对象是通过引用来操作的:栈—堆
-
封装:高内聚 低耦合 属性私有 get/set
- 提高程序安全性 保护数据
- 隐藏代码实现细节
- 统一接口
- 系统可维护性增加
-
Java单继承 父类 子类 is a 关系(私有无法被继承)
-
Java中 所有类 都直接或间接继承Object类
-
调用父类构造方法,必须放在子类构造方法第一行(super和this只能调用一个)
-
静态方法的调用只和左边定义的数据类型有关(静态方法是类的方法 非静态方法 是对象的方法 非静态非私有非final才可以重写 修饰符范围可以扩大但不能缩小 抛出异常范围不能扩大)(对象能执行的方法看左边类型)
-
多态 动态编译 类型 可扩展性
-
instance of 判断对象类型 变量指向的实例是否是指定类型(指定类型子类)
-
下转型对象需要强制类型转换 转型对象丢失方法
-
转型对象,方便方法调用,减少重复代码
-
类加载顺序:静态代码块、匿名代码块、构造方法**(静态代码块赋初始值)**
-
静态导入包
//静态导入包 import static java.lang.Math.random; //下面可直接调用random();
-
抽象类是约束,需要子类来实现(抽象类可以有普通方法、抽象方法)
-
普通类:具体实现 抽象类:具体实现和规范(抽象方法) 接口:只有规范!(约束和实现分离 面向接口编程)
-
Impl接口实现类后缀 接口中 属性是常量 public static final 接口中 方法 是抽象方法 默认public abstract 无构造方法
-
通过外部类来实例化内部类 匿名内部类、lambda的使用……
Java异常
- Java把异常当做对象来处理 定义一个基类 java.lang.Throwable 作为所有异常的超类 分类 错误 Error 和 异常 Exception
- Error由Java虚拟机生成并抛出 与编程员操作无关 JVM终止
- 异常处理 抛出与捕获 try catch finally(常用来关闭io与资源)finally先处理在处理catch 捕获异常层层递进关系(从小到大)
- printStackTrace();//打印错误栈信息 (报的异常)
- System.exit(0/1……);//手动结束程序
- throw 主动抛出异常,一般在方法中使用 方法中处理不了,在方法上抛出异常 throws
- 自定义异常 继承自异常类的类
Java常见异常
Throwable
- Exception
RunTimeException(运行时异常)
- 数组下标越界 java.lang…ArrayIndexOutOfBoundsException
- 类型转换异常 ClassCastException
- 除零异常 / by zero
- 空指针异常 NullPointerException
- 算数异常 ArithmeticException
- 丢失资源 MissingResourceException
- 找不到类 ClassNotFoundException
- Error
- 内存溢出 OutOfMemoryError
- 类定义错误 NoClassDefFoundError
- 链接错误 LinkageError