Java基础学习
JavaSE 标准版 (桌面程序)
JavaME 嵌入式开发
JavaEE 企业级开发 (web开发,服务端开发)
JDK: Java Development Kit
JRE:Java Runtime Environment
JVM:Java Virtual Machine
JDK包含JRE 和开发工具API, JRE包含JVM 和 其他核心类库
卸载JDK:删除安装目录,删除环境变量JAVA_HOME,删除Path下的java变量,java -version查看是否卸载
安装:下载并安装java 1.8,配置环境变量JAVA_HOME和Path,测试是否安装成功,java -version
javac编译, java运行类 ; 找不到或无法加载主类* 是由于大小写、环境变量配置、文件名要和类名保持一致
IDEA下载及安装
数据类型及命名规则
字母、美元$、下划线开头,后面可以是字母、美元$、下划线、数字
八大基本类型:
byte(-128~127)、short、int、long(后缀L)、float(后缀F)、double、char、boolean
整数前缀 : 二进制0b,八进制0,十六进制0x
浮点数大数:BigDecimal 数学工具类
字符char: 所有字符本质是数字 (int)a = 97; '\u0061' 表示 unicode字符a
强制转换可能存在内存溢出 或者 精度问题 !!!
引用类型 :类,接口,数组
变量
-
类变量:类里面,方法外面,从属于类,前加关键字static
-
实例变量:类里面,方法外面,从属于对象,需先构建对象才能调用
-
局部变量:方法里面,作用范围最小
常量
-
加 final 关键字
首字母大写和驼峰原则:类名
首字母小写和驼峰原则:类成员变量、局部变量、方法名
运算符
位运算效率极高
int a = 10;
int b = 20;
System.out.println(a + b + " "); // 30
System.out.println(" " + a + b); // 1020
运算顺序(优先级):
算术运算符 +、-、*、/、%、++、--
赋值运算符 =
关系运算符 >、<、>=、<=、==、!=、instanceof
逻辑运算符 &&、||、!
位运算符 &、|、^、~、>>、<<、>>>
条件运算符 ? :
扩展赋值运算符 +=、-=、*=、/=
导包及其他基础
ctrl + D 复制当前行到下一行
公司域名倒置作为包名
package import ** 导包
cmd里生成帮助文档
javadoc -encoding utf-8 -charset utf-8 Hello.java
IDEA 的 Tools 下 Generate JavaDoc 生成帮助文档
反编译:将class文件拖到java文件所在位置,在IDEA打开,实现反编译
-
Scanner 的 next()、hasNext()、nextLine()、 hasNextLine() 还有 hasNextInt()、hasNextFloat()
-
switch语句的变量类型为 byte、short、int、char、String,case标签必须为字符串常量或字面量
-
可变参数:可变参数必须是最后一个参数,且只能有一个可变参数
public void sum(int n1, double... n2) { } sum( 10, new double[]{10.1, 20.2, 30.0} ); -
递归:递归头:什么时候不调用自身方法
递归体:什么时候需要调用自身方法
-
数组本身就是对象,位于堆中,无论元素是原始类型还是引用类型
Arrays.toString(a); Arrays.sort(a); Arrays.fill(a, 0); Arrays.fill(a, 2, 4, 0);
OOP
Alt + enter 补全变量定义
Alt + insert 调出构造器、重写方法等
OOP 全称 Object-Oriented Programming
Java 为 值传递
面向对象的本质:以类的方式组织代码,以对象的方式组织(封装)数据
new关键字本质是在 调用构造器,构造器用来初始化值
-
封装:属性私有,get / set,提高程序安全性,隐藏实现细节,统一接口,提高可维护性
-
继承:只有单继承,this() 和 super() 构造方法必须放在第一行,且两者不能同时调用
-
多态:存在继承关系,方法重写,父类的引用指向子类
-
方法重载:方法名一样,参数的数量、类型、顺序不一样,不要求返回类型
-
方法重写:子类重写父类 非静态 方法,方法名一样,参数列表必须一样,修饰符范围可扩大不可缩小,异常范围可缩小不能扩大
-
public > protected > default > private
// OOP原则: 组合 大于 继承
// 面向过程 → 对象 → 内部类
class A extends B{
// 继承
}
class A {
// 组合
public B b;
}
抽象类
// 抽象类不能new,抽象类可以包含普通的方法
// 抽象方法必须在抽象类中
abstract class Action{
public abstract void run();
}
abstract class A extends Action{
}
接口
// 接口就是规范,本质是契约
// 接口定义的方法默认:public abstract
// 接口定义的属性默认:public static final
// 接口不能被实例化,可实现多接口
interface UserService{
public static final int AGE = 10;
public abstract void run();
void hello();
}
interface Timer{
void jump();
}
class UserServiceImp implements UserService, Timer{
@Override
public void run() {
}
@Override
public void hello() {
}
@Override
public void jump() {
}
}
内部类
// 成员内部类:在成员的位置,没有static修饰的类
// 静态内部类:在成员的位置,有static修饰的类
// 局部内部类:在方法里面,有名字的类
// 匿名内部类:在方法里面,没有名字的类,比如匿名实现接口的类
// Throwable 类 包含 Error 类 和 Exception 类
// ctrl + alt + T 快捷键调出选择 try ... catch
// alt + enter 提示补充信息或者其他信息
// 方法上抛出异常 :void test() throws ArithmeticException {}
// 方法里面 :throw new ArithmeticException();
浙公网安备 33010602011771号