基础语法

第一个程序

使用编辑器创建一个Hello.java的文本文件(Java源码文件后缀为.java

public class Hello{

    public static void main(String[] args) {
        System.out.println("hello world!");
    }
}

打开命令行,执行编译命令

javac Hello.java

此时目录下产生一个Hello.class的字节码文件(字节码文件后缀为.class),执行运行命令,JVM则加载并运行Hello.class字节码

java Hello

控制台打印输出hello world!

早前,Java是一种纯粹的面向对象的编程语言,因此它的main函数也必须在一个类中声明。在编写Java代码时,首先必须得有一个类

变量与常量

在声明变量与常量时,基本与Dart语言类似

        // 定义整型变量
        int x = 100; 
        // 定义浮点型变量
        double y = 3.14;
        // 定义字符变量
        char ch = 'a';
        // 定义常量
        final String name = "张三";

PS:Java10增加了var语法声明变量,但只能用于局部变量和for循环中

数据类型

总体上分为两种,基本数据类型引用数据类型

8种基本数据类型

一些面试中常区分基本数据类型和引用数据类型

  • 存储位置不同

在方法中定义的非全局基本数据类型变量的数据是存储在栈中的;而引用数据类型变量的数据是存放在堆中的,栈中仅存放数据在堆中的地址

  • 传递方式不同

基本数据类型做方法参数时,是按值传递的;而引用数据类型做方法参数,是按引用传递

注意:此处所谓堆栈指JVM内部实现的概念,与C/C++编程中堆栈概念不一样,Java中的对象只能分配到堆中。

关于Java的值传递和引用传递,外国人有不同的说法,详见此处

字符

Java中,一个char保存的是一个Unicode字符,因此与C语言不同,char也可以表示中文。需要注意,Java中的char只能使用单引号''包裹

char c1 = 'z';
char c2 = '中';

字符串

char类型不同,字符串String类型是引用类型,且字面量必须使用双引号"abc"括起来

String s1 = "编程之路"; 
String s2 = "从0到1";
// 使用“+”进行字符串拼接
String s3 = s1 + s2;
System.out.println(s3);

Java中的字符串是不可变类型,因此使用+进行大量字符串拼接时,性能较低,应使用StringBufferStringBuilder,Dart中也有类似的处理。

    // StringBuilder是线程不安全的,但性能高于StringBuffer
    // 单线程中应使用StringBuilder
    StringBuilder sb = new StringBuilder("hello,");
    sb.append("Bruce!");
    sb.append("Hi!");
    sb.append("Fine!");
    System.out.println(sb);

PS:Java13 新增三引号"""语法,可用于表示字面量为多行的字符串

字符中的一些常用操作

    // 字符串内容的比较必须使用equals方法而不是 “==”
    String str = "hello";
    System.out.println("hello".equals(str));
    System.out.println("hello".equals(str == "hello"));

    // 查找子串
    "Hello".indexOf("l"); // 2
    "Hello".lastIndexOf("l"); // 3
    // 判断是否在头部或尾部包含子串
    "Hello".startsWith("He"); // true
    "Hello".endsWith("lo"); // true

    // 字符串截取
    "Hello".substring(2);    // "llo"
    "Hello".substring(2, 4); // "ll"

    // 替换子串
    String s = "hello";
    s = s.replace('l', '-'); 
    System.out.println(s); // "he--o"

    // 去除首尾空格
    "  He l lo   ".trim();  // "He l lo"

    // 字符串分割
    String s2 = "aa-bb-cc-dd";
    String[] sArr = s2.split("-"); 
    // 使用Arrays.toString可以打印数组
    System.out.println(Arrays.toString(sArr)); // ["aa", "bb", "cc", "dd"]

    // 字符串数组合并
    String[] arr = {"x", "y", "z"};
    String str2 = String.join("==", arr); 
    System.out.println(str2);  // "x==y==z"

    // 字符串分解为char数组
    // 注意,Java的char数组与C语言不同,不包含\0结束符
    char[] chs = "Helloworld".toCharArray();

数组

Java中的数组是一种固定长度有序相同类型元素的存储空间,与C语言中的数组相似,索引从0开始

// 声明一个数组变量
int[] arr;

// 通过字面量声明一个整型数组
int[] arr1 = new int[] { 68, 79, 91, 85, 62 };
// 简写形式
int[] array = { 6, 9, 1, 12, 23 };

// 声明一个长度为8的空数组
double[] arr2 = new double[8];
arr2[0] = 3.12;
arr2[1] = 1.48;

// 对数组调用length获取长度
System.out.println(arr1.length); // 5

需要注意:

  • 空数组的所有元素都会被初始化为默认值,整型都是0,浮点型是0.0,布尔型是false

        boolean[] bs = new boolean[6];
        System.out.println(bs[0]);
    
  • 数组一旦创建后,大小就不可改变

Java也存在多维数组

// 声明一个二维数组
int[][] scores = {
                { 82, 90, 91 },
                { 68, 72, 64 },
                { 95, 91, 89 },
                { 67, 52, 60 },
                { 79, 81, 85 },
        };

二维数组表示,一个数组的元素也是数组。如上例,二维数组可以用来表示一个二维表。

数据类型转换

    // 基础数据类型转字符串
    String.valueOf(123);   // "123"
    String.valueOf(45.67); // "45.67"
    String.valueOf(true);  // "true"

    // 字符串转基础数据类型
    int num = Integer.parseInt("123");            // 123
    boolean flags = Boolean.parseBoolean("true"); // true
    double price = Double.parseDouble("0.5");     // 0.5

Java在处理数值类型时,存在自动类型转换的情况,即取值范围小的类型自动转换为取值范围大的类型

byte < short、char < int < long < float < double

分支与循环

Java中的分支和循环语句,与Dart基本相同

// if...else 逻辑分支

int n = 70;
if (n >= 90) {
    System.out.println("优秀");
} else {
    if (n >= 60) {
        System.out.println("及格了");
    } else {
        System.out.println("挂科了");
    }
}


if (n >= 90) {
    System.out.println("优秀");
} else if (n >= 60) {
    System.out.println("及格了");
} else {
    System.out.println("挂科了");
}

// case 条件分支
int option = 1;
switch (option) {
    case 1:
        System.out.println("Selected 1");
        break;
    case 2:
        System.out.println("Selected 2");
        break;
    case 3:
        System.out.println("Selected 3");
        break;
}

再来看循环语句

// while 循环
int sum = 0; 
int n = 1;
/* 循环条件n小于等于100 */
while (n <= 100) { 
    sum = sum + n; 
    n ++; // n自增
}
System.out.println(sum); 

// do...while 循环
int count = 0;
int l = 1;
do {
    count += l;
    l ++;
} while (l <= 100);
System.out.println(count); 

// for循环打印奇数
for (int i=1; i<=10; i++) {
    if (i % 2 == 0) {
        continue;
    }
    System.out.println("i = " + i);
}

// 使用Java中的for each循环遍历数组
String[] lg = { "dart", "java", "go", "python"};
for (String n : lg) {
    System.out.print(n + ", ");
}

// 传统for循环遍历,带索引
for (int i=0; i<lg.length; i++) {
    int n = lg[i];
    System.out.println(n);
}

公众号“编程之路从0到1”

20190301102949549

Copyright © Arcticfox 2021 all right reserved,powered by Gitbook文档修订于: 2022-05-01 12:20:20

results matching ""

    No results matching ""