Learn Java in Y Minutes 
面向对象 
OOP - Object Oriented Programming
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方面调用。面向对象是模型化的,我们把现实生活中的事物以及关系抽象成类,通过继承、实现、组合的方式实现对现实世界的抽象和数学建模,把类当作一个封闭的黑箱,在其中有数据、有解决问题的方法,我们不必关注黑箱中的具体功能是怎么实现的,只需调用即可。

什么是面向对象(OOP) - 简书 (jianshu.com)
编程范式 

面向对象&函数式编程 

JDK 环境变量配置 
Win 
| 变量 | 值 | 
|---|---|
JAVA_HOME | C:\Program Files\Java\jdk1.8.0_351 | 
Path | %JAVA_HOME%\bin | 
powershell
java -version
# 如果安装的是 SUN/OracleJDK
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)
# 如果安装的是 OpenJDK
openjdk version "1.8.0_381"
OpenJDK Runtime Environment (build 1.8.0_381-b09)
OpenJDK 64-Bit Server VM (build 25.381-b09, mixed mode)
java
javacMac 
通过 Homebrew 安装
JDK8
shell
brew tap homebrew/cask-versions
brew install --cask zulu@8
java -version
cd
vim .zshrc
# 加入下面的配置,保存退出
export JAVA_HOME="/usr/libexec/java_home -v 1.8"
export PATH=$JAVA_HOME/bin:$PATH
# 完成配置
source .zshrc
# 检查配置
echo $JAVA_HOMEJDK17
shell
brew search openjdk
brew install openjdk@17
# 软链接
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdkJDK21
shell
# https://formulae.brew.sh/formula/openjdk@21
brew install openjdk@21
java --version
/usr/libexec/java_home
/usr/libexec/java_home -V
# 把 homebrew 安装的 openjdk 软链接到系统目录
sudo ln -sfn $HOMEBREW_PREFIX/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdkMaven 环境变量配置 
Win 
| 变量 | 值 | 
|---|---|
MAVEN_HOME | D:\A\maven\apache-maven-3.9.5 | 
Path | %MAVEN_HOME%\bin | 
Mac 
shell
cd
vim .zshrc
# 加入下面的配置,保存退出
export M2_HOME="/Volumes/Panamera/programming/java/maven/apache-maven-3.9.5"
export PATH="${M2_HOME}/bin:${PATH}"
# 完成配置
source .zshrc
# 检查配置
mvn -version同时,IDEA 中配置 Maven
- Maven home path: 
/Volumes/Panamera/A/maven/apache-maven-3.9.5 - User settings file: 
/Volumes/Panamera/A/maven/apache-maven-3.9.5/conf/settings.xml - Local repository: 
/Volumes/Panamera/A/maven/localRepository 
xml
<localRepository>/Volumes/Panamera/A/maven/localRepository</lcalRepository>
<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>基本数据类型没有父类 
byte short int long float double boolean char
java
package indi.klaus.jbase;
import org.junit.jupiter.api.Test;
class BalenciagaTest {
    /**
     * @param
     * @return
     * @Description: 基本数据类型没有父类,打印值都为 null
     * @version v1.0
     * @author 刘仁钦
     * @date 2022/9/24 2:03
     */
    @Test
    void getSuperClass() {
        System.out.println(byte.class.getSuperclass());
        System.out.println(short.class.getSuperclass());
        System.out.println(int.class.getSuperclass());
        System.out.println(long.class.getSuperclass());
        System.out.println(float.class.getSuperclass());
        System.out.println(double.class.getSuperclass());
        System.out.println(boolean.class.getSuperclass());
        System.out.println(char.class.getSuperclass());
    }
}| 基本类型 | 位数 | 包装类 | 缺省 sheng 值 | 
|---|---|---|---|
| byte | 8 位 | Byte | 0 | 
| short | 16 位 | Short | 0 | 
| int | 32 位 | Int | 0 | 
| long | 64 位 | Long | 0L | 
| float | 32 位 | Float | 0.0F | 
| double(默认) | 64 位 | Double | 0.0D | 
| char(只能存放一个字符,用 ' ' 表示) | 16 位 | Char | 空 | 
| boolean | 1 位 | Boolean | false | 
java
    int i = 5;
    // 基本类型转包装类型,装箱
    Integer it = new Integer(i);
    // 基本类型自动转包装类型,自动装箱
    Integer it2 = i;
    System.out.println(it); // 5
    System.out.println(it2); // 5
    // 包装类型转基本类型,拆箱
    int i2 = it.intValue();
    // 包装类型自动转换基本类型,自动拆箱
    int i3 = it;
    System.out.println(i2); // 5
    System.out.println(i3); // 5
    // 最大值最小值
    System.out.println(Byte.MAX_VALUE); // 127
    System.out.println(Byte.MIN_VALUE); // -128
    // 数字-字符串互转
    // 数字转字符
    int i4 = 627;
    System.out.println("类型是" + getType(String.valueOf(i4))); // 类型是class java.lang.String
    System.out.println("类型是" + getType(Integer.toString(i4))); // 类型是class java.lang.String
    System.out.println("类型是" + getType(i4 + "")); // 类型是class java.lang.String
    // 字符转数字
    String str = "123";
    System.out.println(Integer.parseInt(str)); // 123
    System.out.println(Integer.valueOf(str));  // 123
    System.out.println("数字转字符串之后的类型是" + getType(Integer.valueOf(str))); // java.lang.Integer构造方法 
无参构造方法不写也会默认提供,如果提供了有参构造,但没有显示的提供无参构造,就不会默认提供无参构造了
java
public class Balenciaga {
    private String origin;
    /*  public Balenciaga() {}  */
    // Call to 'this()' must be first statement in constructor body
    public Balenciaga(String origin) {
        this(); // 🚫 会报错
        this.origin= origin;
    }
}this 代表当前对象 
java
public class Hero {
    String name;
    public void showAddressInMemory() {
        System.out.println("this的地址" + this);
    }
}
    @Test
    void showAddressInMemory() {
        Balenciaga balenciaga = new Balenciaga();
        balenciaga.showAddressInMemory();
        /*
         * 刀妹的地址是indi.klaus.jbase.Hero@75881071
         * this的地址indi.klaus.jbase.Hero@75881071
         * 阿卡丽的地址是indi.klaus.jbase.Hero@2a70a3d8
         * this的地址indi.klaus.jbase.Hero@2a70a3d8
         * */
        Hero irelia = new Hero();
        irelia.name = "艾瑞莉娅";
        System.out.println("刀妹的地址是" + irelia);
        irelia.showAddressInMemory();
        Hero akali = new Hero();
        akali.name = "阿卡丽";
        System.out.println("阿卡丽的地址是" + akali);
        akali.showAddressInMemory();
    }访问控制修饰符 
package = default
| 自身 | 同包类 | 同包子类 | 不同包子类 | 其他类 | |
|---|---|---|---|---|---|
| private | 访问 | 不能访问 | 不能继承 | 不能继承 | 不能访问 | 
| package | 访问 | 访问 | 继承 | 不能继承 | 不能访问 | 
| protected | 访问 | 访问 | 继承 | 继承 | 不能访问 | 
| public | 访问 | 访问 | 继承 | 继承 | 访问 | 
重载重写 
重载:方法名一样,参数类型不一样,在调用方法 attack 的时候,会根据传递的参数类型以及数量,自动调用对应的方法
java
public void attack()
public void attack(Hero h1)
public void attack(Hero h1, Hero h2)垃圾回收(garbage collection) 
HEAP: 堆内存,存放对象实例 STACK: 栈内存,存放局部变量(包括这个变量如果是对象实例的引用),方法执行完毕后 Java Runtime 会立即自动释放
如果一个对象在一段时间内不再使用(包括没有任何引用指向它),那么这个对象会被垃圾回收器回收
