01.Java基础

发布于 2025-07-22  113 次阅读


一、Java入门

1.使用Java输出hello world

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

2.Java程序执行的原理

graph LR
id0(.java)--Javac编译器-->id1(.class)--Java执行工具-->id2(机器指令)

3.JDK和JRE

  • JVA(Java Virtual Machine):Java虚拟机,真正运行Java程序的地方
  • JDK(Java Development Kit):Java开发工具,包含Java的编译器、虚拟机等Java开发、运行需要的工具
  • JRE(Java Runtime Environment):Java运行环境,包含Java虚拟机等Java运行需要的工具

4.配置环境变量

  • JAVA_HOME:告诉操作系统JDK的安装位置
  • Path:路径为JDK中的bin文件夹(可以写为%JAVA_HOME%bin,百分号表示取这个变量的路径)

二、注释

1.单行注释

//这是一个单行注释

//Ctrl + / :快速单行注释

2.多行注释

/*
这是
多行
注释
 */

//Ctrl + Shift + / :快速多行注释

3.文档注释

/**
 这是文档注释
 常用在class上
 */

三、字面量

1.定义

字面量就是数据在程序中书写的格式

2.分类

字面量类型 说明 示例
整数 不带小数的数字 100
小数 带小数的数字 3.14
字符 单个字符,使用单引号 'a'
字符串 多个字符,使用双引号 "abcd"
布尔值 表示真假 true、false
空值 一个特殊的值,表示空 null
package C_03;

public class Literal {
    public static void main(String[] args) {
        //1.整数
        System.out.println(100);
        //2.小数
        System.out.println(3.14);
        //3.字符
        System.out.println('a');
        //4.字符串
        System.out.println("abcd");
        //5.布尔值
        System.out.println(true);
        //6.空值:null
    }
}

四、变量

1.定义

变量是内存中的一片区域,用于存储数据

2.格式

数据类型 变量名称 = 初始值;

3.改变变量的值

package C_04;

public class Variable {
    public static void main(String[] args) {
        double money = 3.14;
        System.out.println(money);

        //再次赋值
        money = 5.14;
        System.out.println(money);

        //数学运算
        money = money + 4.0;
        System.out.println(money);
    }
}

4.注意事项

  • 变量不能存储与其数据类型不符的数据
  • 变量的有效范围是其所在的作用域,同一作用域内不能定义同名变量
  • 变量在定义时可以不进行初始化,但使用之间需要进行初始化

5.数据类型

  • 引用数据类型
  • 基本数据类型
    • 整数
    关键字 内存占用(字节)
    byte 1
    short 2
    int 4
    long 8

    注:Java中的整数字面量默认为int类型,如果希望其为long类型,需要在末尾添加L或l

    • 浮点数
    关键字 内存占用
    float 4
    double 8
    • 字符
    关键字 内存占用
    char 2
    • 布尔
    关键字 内存占用
    boolean 1

6.数据类型转换

  • 自动类型转换:类型范围小的变量可以直接赋值给类型范围大的变量
  • 表达式的自动类型转换:在表达式中,小范围类型的变量会自动转换成大范围类型的变量进行运算,表达式的最终结果的类型是由其中最大范围类型的变量决定的(其中byte,char,short作为int类型参与运算)
  • 强制类型转换:强制将大范围类型变量赋值给小范围类型变量,高位会被截断丢弃(浮点型转换为整型会丢弃小数部分)
    package C_01;
    
    public class TypeConversion {
      public static void main(String[] args){
          //1.自动类型转换
          byte a = 20;
          double b = a;
          System.out.println(a);
          System.out.println(b);
          //2.表达式的自动类型转换
          double c = 3.14;
          System.out.println(a+c);
          //3.强制类型转换
          //语法:变量 = (类型)变量
          int d = 500;
          byte e = (byte)d;
          System.out.println(d);
          System.out.println(e);
          //浮点型->整型
          double f = 3.14;
          int g = (int)f;
          System.out.println(f);
          System.out.println(g);
      }
    }
    

五、运算符

1.算术运算符

符号 作用
+ 加法
- 减法
* 乘法
/ 整除
% 取余
++ 自增
-- 自减
+= 加后赋值
-= 减后赋值
*= 乘后赋值
/= 整除后赋值
%= 取余后赋值

注:+可以用于字符串的运算,其结果仍为字符串

package C_02;

public class operator_1 {
    public static void main(String[] args){
        //算术运算符
        //1.加法
        int a = 7;
        int b = 2;
        System.out.println(a+b);
        //2.减法
        System.out.println(a-b);
        //3.乘法
        System.out.println(a*b);
        //4.整除
        System.out.println(a/b);
        //5.取余
        System.out.println(a%b);
        //6.自增
        System.out.println(++a);
        //7.自减
        System.out.println(--b);
        //8.+=
        int c = 0;
        c += 1;
        System.out.println(c);
        //9.-=
        int d = 0;
        d -= 1;
        System.out.println(d);
        //10.*=
        int e = 5;
        e *= 5;
        System.out.println(e);
        //11./=
        int f = 5;
        f /= 2;
        System.out.println(f);
        //12.%=
        int g = 5;
        g %= 2;
        System.out.println(g);
        //13.字符串运算
        System.out.println("abc"+a);
    }
}

2.关系运算符

符号 作用(判断)
== 相等
! = 不等于
> 大于
< 小于
> = 大于等于
< = 小于等于
package C_02;

public class operator_2 {
    public static void main(String[] args){
        //关系运算符
        int a = 5, b = 6;
        System.out.println(a == b);
        System.out.println(a != b);
        System.out.println(a > b);
        System.out.println(a < b);
        System.out.println(a >= b);
        System.out.println(a <= b);

    }
}

3.逻辑运算符

符号 作用
&
|
!
^ 异或
&& 短路与(左侧为false则不执行右侧)
|| 短路或(左侧为true则不执行右侧)
package C_02;

public class operator_3 {
    public static void main(String[] args){
        double size = 12;
        double price = 2000;
        System.out.println(size > 10 & price <5000);
        System.out.println(size > 10 | price <1000);
        System.out.println(!(size > 10));
        System.out.println(size > 10 ^ price <5000);
        System.out.println(size < 10 && price <5000);
        System.out.println(size > 10 || price <1000);
    }
}

4.三元运算符

  • 格式:条件表达式 ? 值1 : 值2
  • 作用:判断条件是否成立,成立返回值1,不成立返回值2
    public class DraftPaper {
      public static void main(String[] args){
          int a = 10;
          int b = 200;
          System.out.println(a>b ? a : b);
      }
    }
    

六、程序流程控制

1.顺序结构

程序默认使用顺序结构,代码自上而下运行

2.if分支结构

  • 格式一:if(条件){代码}
  • 格式二:if(条件){代码}else{代码}
  • 格式三:if(条件){代码}else if(条件){代码}else{代码}
package C_01;

public class if_branch {
    public static void main(String[] args){
        //if分支结构
        //1.if(条件){代码}
        int money = 50;
        if(money < 100)
        {
            System.out.println("余额不足..."+"当前余额:"+money);
        }
        //2.if(条件){代码}else{代码}
        int num = 0;
        if(num < 0)
        {
            System.out.println("这个数是负数");
        }
        else
        {
            System.out.println("这个数不是负数");
        }
        //3.if(条件){代码}else if(条件){代码}else{代码}
        int score = 90;
        if(score < 60)
        {
            System.out.println("未及格!");
        }
        else if(score < 90)
        {
            System.out.println("良好");
        }
        else
        {
            System.out.println("优秀");
        }
    }
}

3.switch分支结构

  • 格式:switch(表达式){case:值1 break case:值2 break default:}
package C_01;

public class switch_branch {
    public static void main(String[] args){
        //switch分支结构
        String weekday = "周一";
        switch(weekday)
        {
            case "周一":
                System.out.println("今天是周一");
                break;
            case "周二":
                System.out.println("今天是周二");
                break;
            case "周三":
                System.out.println("今天是周三");
                break;
            case "周四":
                System.out.println("今天是周四");
                break;
            case "周五":
                System.out.println("今天是周五");
                break;
            case "周六":
                System.out.println("今天是周六");
                break;
            case "周日":
                System.out.println("今天是周日");
                break;
            default:
                System.out.println("???");
        }
    }
}
  • 注意事项
    • 表达式的类型只能是byte、short、int、char,JDK5之后支持枚举类型,JDK7之后支持String类型,不支持double、float、long
    • case的值不能重复,且只能是字面量
    • 不写break会造成穿透,不判断条件继续执行后续case中的代码

4.for循环结构

  • 格式:for(初始化语句;循环条件;迭代语句){循环体}
package C_02;

public class for_loop {
    public static void main(String[] args){
        //for循环
        for(int i=0;i<3;++i)
        {
            System.out.println("Hello World!");
        }
    }
}

5.while循环结构

  • 格式:while(循环条件){循环体}
package C_02;

public class while_loop {
    public static void main(String[] args){
        //while循环
        int i=0;
        while(i<3)
        {
            System.out.println("hello world!");
            ++i;
        }
    }
}

6.do-while循环结构

  • 格式:do{循环体}while(循环条件)
package C_02;

public class do_while_loop {
    public static void main(String[] args){
        //do_while循环
        int i=0;
        do{
            System.out.println("hello world!");
            ++i;
        }while(i<3);
    }

7.流程控制语句

  • break:退出当前结构
  • continue:结束本次循环,进入下一次循环

七、数组

1.定义

  • 数组是用于存储一批同种类型数据的内存区域
  • 静态初始化数组的定义
    • 定义:数据类型[] 数组名=new 数据类型[]{元素1,元素2,...}
    • 简化定义:数据类型[] 数组名={元素1,元素2,...}
            //静态初始化数组
            //1.数据类型[] 数组名=new 数据类型[]{元素1,元素2,...}
            int[] num1=new int[]{1,2,3,4,5};
            //2.数据类型[] 数组名={元素1,元素2,...}
            int[] num2={6,7,8,9,10};
  • 动态初始化数组的定义
    • 定义:数据类型[] 数组名=new 数据类型[长度],数组中会填充默认值
            //动态初始化数组
            String[] name=new String[10];

2.访问数组

可以通过下标访问数组中的元素数组名[下标],可以通过数组名.length访问数组的长度

        int[] num3={1,2,3,4,5};
        //取值
        System.out.println(num3[2]);
        //赋值
        num3[2]=100;
        System.out.println(num3[2]);
        //访问长度
        System.out.println(num3.length);

3.注意事项

  • 数据类型[] 数组名也可以写作数据类型 数组名[]
  • 数组不能存储与其数据类型不符的数据
  • 数组被定义之后,其数据类型和长度就已经固定

八、方法

1.定义

  • 与其他语言中所说的函数相同,封装一定的操作,输入指定类型的数据,执行操作输出指定的结果
    修饰符 返回值类型 方法名(形参列表){
      方法体;
      return 返回值;
    }
    
    //示例
    public static int Sum(int a,int b){
      int c=a+b;
      return c;
    }

2.注意点

  • Java中方法编写的顺序无所谓
  • 方法内不能进行嵌套定义

3.方法重载

  • 方法重载:同一个类中,多个方法名称相同,但形参列表不同
      //方法重载
      public static void func(){
          System.out.println("调用函数,函数参数:空");
      }
      public static void func(int a){
          System.out.println("调用函数,函数参数:int");
      }
      public static void func(int a,int b){
          System.out.println("调用函数,函数参数:int,int");
      }

九、面向对象编程

1.定义类

public class 类名{
    //1.成员变量
    //2.成员方法
    //3.构造器
    //4.代码块
    //5.内部类
}

注意:在同一文件中,使用public修饰的类只能有一个,且类名要与文件名相同,建议一个文件只定义一个类

2.创建对象

类名 对象名 = new 类名();

3.构造器

//构造器用于初始化类对象,并返回类的地址

修饰符 类名(参数列表){

}

注意:定义有参构造器会导致无参构造器不再默认生成,如果需要使用无参构造器,则需要手动定义

4.this关键字

代表当前对象的地址,用于访问当前对象的成员变量和成员方法

public class my_class{
    int num;

    public my_class(int num)
    {
        num = num; //这里修改的是传入的参数
        this.num = num; //这里修改的是类的成员
    }
}

5.private关键字

类中通过private关键字可以将类中的成员变为私有

public class my_class{
    private int _num;//成员为私有,无法从外部访问

    //提供方法操作私有成员
    public void setNum(int num)
    {
        _num = num;
    }
}

6.JavaBean

  • JavaBean:可以理解为实体类,其对象可以在程序中封装数据
  • 要求
    • 成员变量使用private修饰
    • 提供每一个成员变量的set和get函数
    • 提供一个无参构造器
    public class my_class{
      private String _name;
      private int _age;
      private int _score;
    
      public void setName(String name)
      {
          _name = name;
      }
      public String getName()
      {
          return _name;
      }
    
      public void setName(int age)
      {
          _age = age;
      }
      public int getName()
      {
          return _age;
      }
    
      public void setScore(int score)
      {
          _score = score;
      }
      public int getScore()
      {
          return _score;
      }
    
      public my_class()
      {
    
      }
    }

十、String类

1.简介

  • 位置:java.lang.String
  • String类定义的变量用于存储字符串,提供了操作字符串的功能
  • String的对象在创建之后不能被更改

2.创建String类对象

  • 方式一:直接使用""定义
    String 对象名 = "字符串";
  • 方式二:使用构造器
    构造器 说明
    public String() 创建空白字符串对象
    public String(String original) 根据传入的字符串内容创建对象
    public String(char[] chs) 根据字符数组的内容创建对象
    public String(byte[] chs) 根据字节数组的内容创建对象
  • 区别
    • 使用""定义:存储在字符串常量池中,相同内容只会存储一份
    • 使用构造器:存储在堆内存中,每new一次会多存储一个对象

3.String常用API

  • 字符串比较API
    • 使用==进行比较时,相同内容如果一个存储在堆内存,一个存储在字符串常量池,则会导致不相等,因此字符串不适合使用==判断
    //比较字符串内容
    字符串对象.equals(字符串);
    
    //忽略大小写比较字符串内容
    字符串对象.equalsIgnoreCase(字符串);
  • 其他API
    • public int length():获取字符串长度
    • public char charAt(int index):获取某个索引位置的字符
    • public char[] toCharArray():将字符串转换为字符数组
    • public String substring(int beginIndex,int endIndex):截取内容,左闭右开
    • public String replace(CharSequence target,CharSequence replacement):用target替换replacement
    • public boolean contains(CharSequence s):查找字符串内是否存在s
    • public boolean startWith(String prefix):判断字符串是否以prefix开头
    • public String[] split(String s):按照s将字符串分割为字符串数组,会删除s

十一、ArrayList集合

1.简介

  • 集合与数组类似,是用于存储数据的一个容器,集合的大小不固定,启动后可以动态变化,类型也可以选择不固定
  • ArrayList是集合中的一种,它支持索引

2.创建ArrayList类

  • public ArrayList<约束类型>():无参构造器

3.ArrayList常用API

  • public boolean add(E e):在集合末尾插入元素
  • public void add(int index,E e):在指定位置插入元素
  • public E get(int index):返回索引处的元素
  • public int size():返回集合元素的个数
  • public E remove(int index):删除指定索引处的元素,返回被删除的元素
  • public boolean remove(Object o):删除指定的元素,返回删除是否成功
  • public E set(int index,E element):修改指定索引处的元素,返回被修改的元素

十二、IDEA项目结构

  • project(项目、工程)
  • module(模块)
  • package(包)
  • class(类)

附录:Java常用API

0.API简介

1.Scanner

  • import java.util.Scanner

2.Random

  • import java.util.Random

学习是一段漫长的旅途