Java:常用语句

学习时可参考:

Java在线文档(中文版)

Java官方文档(英文版)

0、基本

0.1、导入某个Module

格式:import 包1.包2.类名

import java.util.List;
import java.util.ArrayList;

 import 包.*导入包中的所有类(不包含子包中的类)

 

一些注解所在的包:

  • @WebServlet:javax.servlet.annotation.WebServlet

0.1、浮点值的相等判断

尽量不要用 ==,而要设置为小于某个精度时成立:

double r = Math.abs( x - y )
if(r < 0.00001){
    //可以认为相等
}
else{
    //不相等的情况
}

 

0.2、类型判断:instanceof

变量 instanceof 类型

用于检查变量是否是某种类型,返回true或false;

boolean isDouble = n instanceof Double;

 

0.3、变量类型:var

var作为类型定义某个变量时,可以实现动态类型多态):

        var sb = new StringBuilder(1024);
        var i = 5;

 0.4、static与final

Java中用final来定义常量;static定义静态属性和方法,可以直接通过类名访问。

如果想在main()方法中直接访问某个函数,那么该函数除了需要在该public类中,还必须以static加以说明。

0.5、基本语句

①if

if (条件1){
    //执行语句1
} else if (条件2){
    //执行语句2
} else {
    //执行语句3
}

②switch

复制代码
switch(表达式){
    case v1:
        语句1;
        break;
    case v2:
        语句2;
        break;
    default:
        语句n;
}
复制代码

其中表达式可以是一个字符串,这时比较的是表达式代表的字符串内容是否与v1、v2代表的字符串内容相同

 

switch简化版本

switch(表达式){
    case v1 -> {语句块1;}
    case v2 -> {语句块2;}
    default -> {语句块n;}
}

这种写法不写break,也不会穿透到下一句中。

此外,这种写法可以返回一个值被某个变量承接:

int n = switch(表达式){
    case v1 -> 1; //if 表达式==v1 return 1
    case v2 -> 2;
    default  -> 0;
}

yield

大多数时候,在switch表达式内部,我们会返回简单的值

但是,如果需要复杂语句,我们也可以写很多语句(在case之后的语句块中),放在{...}中,然后,用yield返回一个值作为switch语句的返回值

yield:相当于一次return(return是函数中的,yield是switch专用)。

int n = switch (fruit) {
    case "apple" -> 1;
    case "banana" -> 2;
    default -> {
        int code = fruit.hashCode()
        yield code;
    }
};

也就是说,相当于在其中嵌入了一段只有返回值(该返回值用yield承接)的函数

③for

基本写法

for(初始条件;结束检测条件;计数器){
    //循环体
}

访问一个List中的元素:for each

List <String> list = List.of("apple","pear","banana");
for(String s : list)
    System.out.println(s);

④while

while(条件表达式){
    //循环体
}

⑤do while 

do{
    循环体
} while (条件表达式) ;

注意最后的分号

0.6、?:选择运算符

System.out.println(exist ? "测试成功!" : "测试失败!");

 0.7、或与非

逻辑

&&、||、!

按位

& | ~ ^(异或)

0.7*、判断变量A是否为null

if(A == null){
    ...
}

 

0.8、输入输出

输出

Java:输入输出、格式化输出 - ShineLe - 博客园

输入——从控制台读取,或者用户输入

一个从控制台读取一个String和一个整数的例子:

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Input your name:");
        String name = scanner.nextLine();//读取一行输入并获取字符串
        System.out.print("Input your age:");
        int age = scanner.nextInt(); //读取一行输入并获取整数
        System.out.printf("Hi,%s,you are %d\n", name, age);
    }
}
复制代码

①导入java.util.Scanner;

②创建Scanner对象scanner,创建时传入参数System.in。直接使用System.in读取用户输入虽然可行,但是需要更复杂的代码,而通过Scanner就可以简化后续代码

③输入;scanner.nextLine()接收用户输入的字符串,scanner.nextInt()接收用户输入的整数。Scanner会自动转换数据类型,因此不用手动转换。

 

0.9、命令行参数

Java程序入口是main方法,main方法接收一个命令行参数,它是一个String数组,写法是String[ ]args,该参数由JVM接收用户输入并传递给main方法。

访问该方法,在String数组args上使用for each循环

for(string arg : args){
    func(arg);
}

命令行参数的传入时机:

①编译java文件; javac Main.java

②执行并传入命令行参数-version;java Main -version

1、字符串

1.1、字符串连接——+

1.2、各类型向字符串转化

""+val //val可以是任何类型的变量

 1.3、字符串内容相等的判断

str1.equals(str2);

"hello".equals(str2);

 

2、数组

和C中的用法类似,打印时只写数组名,那么对应的是数组首项的地址。

2.0、构造数组

①一维数组

三种方法:①是动态初始化,先定义后赋值;②③是静态初始化,在定义时就初始化。

复制代码
//①先定义数组大小后初始化
int [] arr = new int [5];
arr[0]=1;
arr[1]=2
...
//②定义时就进行初始化 //最常用 int [] arr = { 1,2,3,4,5 }; //
int [] arr = new int [] {1,2,3,4,5};//不要写成 new int [5] {...}
复制代码

 

②二维数组

复制代码
//①先分配空间,后进行初始化
int [] ns = new int [8];
for(int i=0;i<8;i++)
    ns[i]=new int [8];

//②在定义时,直接初始化
int [][] ns ={
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
};
复制代码

二维数组实际上相当于数组元素为数组的一维数组。

这里每个元素数组的长度可以不一样

int [] [] ns ={
    {1,2,3,4},
    {5,6},
    {7,8,9}
};

 

2.1、属性

数组长度:length

2.2、方法

1、判断List中是否包含某个元素o:contains( Obj o )

if ( list.contains( o ) )
    return true;

2.3、访问数组元素

①最基本的方式

for(int i=0;i<8;i++)
    ...

②用for each结构访问数组中的每一个元素

for (n : arr){
    //循环体
}
for(int [] i:ns){
    for(int j : i){
        //循环体
    }
}

2*、字符串

StringBuilder:字符串之间的拼接

2021.5.2:StringBuilder

StringJoiner:字符串数组中的字符串之间的拼接

不过以上两项用的还不算多,更多的是用String.join()方法,该方法可以通过灵活设置分隔符起到各种拼接的效果。

见:2021.5.2:StringJoiner

用法:

String.join(分隔符,字符串数组)

这里的第一项参数分隔符必须是String类型,而不能是char类型。

3、类、接口

3.1、类与对象

2021.4.26:类、继承、多态、抽象、面向抽象编程 - ShineLe - 博客园

函数覆写与函数重载

函数重载是指在某个类中,同时写两个同名函数,它们的参数不同

函数覆写,则是子类中写一个与父类中某个函数同名函数,用以覆盖父类中的该函数。

3.2、接口

2021.4.27:接口 - ShineLe - 博客园

3.3、静态属性与静态方法

2021.4.27:静态属性与静态方法

修饰符:static

这类属性和方法不是某个对象所有,而是这个类所拥有的,访问时可以直接用类名.xxx、类名.func(...)的方式调用。

 

4、异常

2021.5.5:异常/Exception、try...catch...finally

4.1、异常的捕获与处理

复制代码
try {
    //可能出错的语句
}
catch(Exception1 e){
    //捕获到1类错误时的后续处理
}
catch(Exception2 e){
    //捕获到2类错误时的后续处理
}
....
复制代码

如果存在异常而没处理,则必须在该异常所在的函数中手动throws该异常:

 

void func(...) throws xxxException{
    //存在异常但没有用try捕获并处理的语句块
}

catch之后的打印:

e.printStackTrace();

 

11.2、手动抛出异常

人为手动抛出异常,要用throw,抛出的异常必须被上文捕获

步骤:

①、创建某Exception的实例

②、用throw抛出

void process2(String s){
    if(!s){
        throw new NullPointerException();
    }
}

为了保证可以追踪到最初的异常,保留原始异常栈,在构造异常时,需要把原始的Exception实例传进去:

        try {
            process2(s);
        } catch (NullPointerException e) {
            throw new IllegalArgumentException(e);
        }

 

11.3、NullPointerException

2021.5.6:NullPointerException

NullPointerException是最常见的RuntimeException,即空指针异常NPE

如果对一个null调用属性、方法,就会产生NullPointerException,它是由JVM抛出的。

 

 

 

 

 

 

 

 

 

posted @   ShineLe  阅读(371)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示