5 min read
Web组 第二次授课

Java 基础语法

注释

给代码写注释是一个良好的编程习惯。可以使代码逻辑更加清晰,方便出错时找 bug,也可以让别人更容易的看懂你的代码。注释在编译时会被编译器忽略,所以它不会对你的代码产生影响。

class HelloWorld{
   /* 这是一个多行注释
    * 这是一个Java程序
    * 它将输出 "Hello World!"
    */
    public static void main(String[] args) {
       // 这是单行注释的示例
       /* 这个也是单行注释的示例 */
       System.out.println("Hello World!");
    }
}

基本数据类型

// Java内置了八种基本数据类型
// 基本数据类型:整数类(byte、short、int、long)、浮点类(float、double)、字符类(char)、布尔型(boolean)
int a = 1;        // 4个字节,[-2^31, 2^31-1]
short b = 1;      // 2个字节,[-32768, 32767]
long c = 1;       // 8个字节,[-2^64, 2^64-1]
float e = 1.6f;   // 4个字节,精确到小数点后7位。多数情况下,float类型精度很难满足需要
double d = 1.7;   // 4个字节,精度是float的2倍,一般来说double比float更加常用
// ①默认浮点类型为double;②使用float的时候,数字后面要添加f;
byte h = 127;     // 1个字节,[-128, 127]
boolean f = true; // 布尔型:1个字节,只有true和false两个值
char g = 'x';     // 字符类:2个字节,使用时用单引号表示

声明变量的三个基本部分

  1. 类型:即数据的类型,如int(整数)、double(浮点数)、char(字符)、String(字符串)、boolean(布尔值)等
  2. 名称:变量的标识符
  3. (可选):可以在声明变量时初始化变量

声明变量的语法

type variableName;         // 仅声明
type variableName = value; // 声明并初始化

示例

int age;                 // 声明一个整型变量名为 age
age = 25;                // 初始化变量 age

double salary = 5000.75; // 声明并初始化一个双精度浮点数 salary

变量命名规则

  • 变量名必须以字母A-Za-z、美元符$或下划线_开始
  • 变量名的其他部分可以包含字母、数字、美元符和下划线
  • 大小写敏感,即age, Age, AGE 是三个不同的变量
  • 不能使用 Java 的保留关键字作为变量名,例如int, boolean 等。

最佳实践

  • 命名清晰: 变量名应清楚地反映信息或意图,例如使用studentCount而不是sc
  • 遵循约定: Java 通常使用驼峰命名法,如myVariableName。参考:维基百科-驼峰命名法

camel-case

运算符

算数运算符

操作符描述例子
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B 等于 200
/除法 - 左操作数除以右操作数B / A 等于 2
取余 - 左操作数除以右操作数的余数B%A 等于 0
++自增: 操作数的值增加 1B++ 或 ++B 等于 21
自减: 操作数的值减少 1B— 或 —B 等于 19
int i = 1; // 此时i的值为1
i++;       // 此时i的值为2

赋值运算符

操作符描述例子
=赋值运算符,将右操作数的值赋给左侧操作数C = A + B 将把 A + B 得到的值赋给 C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A 等价于 C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A 等价于 C = C - A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C _ = A 等价于 C = C _ A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A,C 与 A 同类型时等价于 C = C / A
int i = 1; // 此时i的值为1
i += 10;   // 此时i的值为11

关系运算符

关系运算符的运算结果为 boolean(布尔)型,即 true 或 false

运算符描述
==检查如果两个操作数的值是否相等,如果相等则条件为真。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。
int i = 1;
int j = 2;
double k = 1.0
boolean equal1 = i == j; // equal1的值为false
boolean equal2 = i == k; // equal2的值为true

逻辑运算符

逻辑运算符的运算结果为 boolean(布尔)型,即 true 或 false

操作符描述例子
&&逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
||逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
逻辑非运算符。用来反转操作数的逻辑状态。如果条件为 true,则逻辑非运算符将得到 false。!(A && B)为真。
boolean a = true;
boolean b = false;

boolean c = a && a; // c的值为true
boolean d = a || b; // d的值为true
boolean e = !a;     // e的值为false
boolean f = a && b; // f的值为false

控制结构

条件语句

if (a) {
  ...
} else if (b) {
  ...
} else {
  ...
}
String name = "板烧鸡腿堡";
switch (name) {
    case "板烧鸡腿堡":
        System.out.println("我是板烧鸡腿堡");
        break;
    case "麦辣鸡腿堡":
        System.out.println("我是麦辣鸡腿堡");
        break;
    case "麦乐鸡":
        System.out.println("我是麦乐鸡");
        break;
    // 如果上述的case中没有任何匹配的,就会执行default语句
    default:
        System.out.println("让我尝一尝才知道");
}

循环结构

while 循环

while(布尔表达式) {
  // ...
}
int i = 0;
while (i < 5) {
  i++;
  System.out.println(i);
  // 输出:
  // 0
  // 1
  // 2
  // 3
  // 4
}

do…while 循环

对于 while 循环来说,如果不满足条件,则不能进入循环,但对于 do…while 循环来说,至少进入一次循环之后才会判断条件。所以循环至少会执行一次

// 会输出hello, world!
do {
  System.out.println("hello, world!");
} while (false);

for 循环

for(初始化; 布尔表达式; 更新) {
    // ...
}
for (int i = 10; i > 5; i--) {
  System.out.println(i);
  // 输出:
  // 10
  // 9
  // 8
  // 7
  // 6
}

跳转语句

break

break 主要用于跳出循环结构或者 switch 语句块,break 可以跳出当前代码的最里层循环

for (int i = 0; i < 10; i++) {
  for (int j = 0; j < 10; j++) {
    if(j == i){
      break; // 只跳出内层循环
    }
    System.out.println(i + " " + j);
  }
}

continue

continue 用于直接进入下一次循环

for (int i = 0; i < 10; i++) {
  if(i == 5) {
    continue;
  }
  System.out.println(i + " " + j);
}

数组

// type[] name = new type[length];

// 动态初始化,初始化时就指定长度
int[] arr = new int[3];
// 静态初始化,初始化时指定内容
int[] arr2 = new int[]{1,3,5,7};

// 各种数据类型都可以有数组,例如下面就是一个String的数组
String[] departments = {"前端", "后端", "C++", "C#"};

面向对象基础

**在 Java 中,万物皆是对象。**一个 Java 程序可以认为是一系列对象(Object)的集合,而这些对象通过调用彼此的方法(Method)来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。

类与对象(Class & Object)

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

类 (Class)

类可以看作是一种蓝图或模板,它定义了一组具有相同属性(数据元素)和方法(功能)的对象的共同特征。可以将类比喻为建筑图纸,它描述了如何构建某种类型的实体(如房子、学校、医院等)。

特点:

  • 属性:类定义了对象的数据,即有哪些属性(如颜色、大小、形状等)。
  • 方法:类还定义了可以执行的操作(即方法),如计算面积、改变状态等。

对象 (Object)

对象则是根据类的定义创建的实例。每个对象都拥有类中定义的属性和方法,但具体的属性值可以不同。如果类是建筑图纸,那么对象就是根据这些图纸建造的实际建筑。

特点:

  • 实例化:创建具体的对象过程称为实例化,即按照类的蓝图具体化一个实体。
  • 独立性:每个对象都保持其属性独立,互不影响。例如,两座建筑可以根据同一设计图纸建造,但各自的具体使用情况、内部装修等可以完全不同。

类与对象的关系

  • 模板与实例:类是对象的模板,对象是类的实例。
  • 设计与实现:类是设计,确定了创建对象所需的框架;对象是实现,是设计的具体体现

类的创建(new)

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}
int sum(int a, int b) {
    return a + b; // 返回两个数的和作为返回值
}
class Cat {
    // 名字
    String name;
    // 年龄
    int age;
    // 种类
    String type;

    // 构造方法
    Cat(String name, int age, String type){
      this.name = name;
      this.age = age;
      this.type = type;
    }

    String getName() {
        return name;
    }

    //吃
    void eat() {
    }

    //跑
    void run() {
    }

    //睡
    void sleep(){
    }
}

构造方法

每个类都有构造方法。如果没有定义构造方法,Java 编译器将会为该类提供一个默认构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

Cat cat = new Cat("乐事", 1, "银渐层");
System.out.println(cat.getName()); // 此处返回“乐事”

作业

自行了解 Java 面向对象的进阶内容