java se 基础
前言:补一些java基础知识
前置知识
在写java的基础知识前,我们先来学习一下用vscode运行java项目的一些基础内容,首先,
想要在vscode中运行java在下载插件后需要创建java项目,一个不用其余工具的java项目中有
两个文件夹,一个是lib,用于存储引用的包,一个是src,用于存储源代码,在vscode中运行
java进行文件操作时,默认的当前路径并不是代码文件的当前路径,需要在setting.json中对
对应的类添加cwd属性进行配置,如果是${workspaceFolder}
则是那个项目的根目录,如
果是${fileDirname}
则是代码文件的目录
1.0 输入
import java.util.*;
public class hello {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
System.out.println(a.nestLine());
}
}
nextLine()
方法用于读取一行的字符,以换行符作为输入的结尾
如果我们想要以空格为结尾,则为
next()
想要读取一个整数,可以调用nextInt()
方法
想要读取下一个浮点数,可以受用nextDouble
方法
如果我们想知道文本中输入是否结束,可以使用hasNext()
方法,判断文本中下一个是否还
有单词输入
我们通过Scanner
读取的数据在输入过程中都是直接可见的,不是很安全,如果我们想要更
安全一点,可以使用Console
import java.util.*;
import java.io.*;
import java.util.Scanner;
public class hello {
public static void main(String[] args) {
Console a = System.console();
System.out.println(a.readPassword("Enter password: "));
}
}
需要包含 java.io
包的内容,当然也可以单独把Console给包含进去
1.1 读取文件
读取文件同样需要我们使用到Scanner对象,
import java.util.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
String filePath = "a.txt";
try (Scanner scanner = new Scanner(Path.of(filePath), StandardCharsets.UTF_8)) {
while (scanner.hasNextLine()) { // 如果存在下一行内容,则执行下述内容
String line = scanner.nextLine();
// 在这里处理读取到的每一行内容
System.out.println(line); // 打印到控制台
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
其余的方法使用和上面的相同,需要主义的是,如果我们的路径中使用了反斜杠\
,我们就
需要输入两个反斜杠对其进行转义,从而被识别为一个反斜杠。
StandardCharsets.UTF_8 表示文件使用UTF-8编码,如果没在此参数进行说明,则会采用
运行程序的机器的默认编码,为了正常读取,还是指定一下编码好一点。
需要注意的是,在我们利用该方法读取文件时,首先要引入java.nio.file.Path
,其次必须
做处理异常,即使用try
和catch
否则会报错
如果我们直接Scanner(一个字符串)
则会构造一个从定字符串读取数据的Scanner
1.2 写入文件
想要写入文件,需要用到PrintWrite 对象,该对象位于io包中,具体的使用如下
PrintWriter out =new PrintWriter("a.txt",StandardCharsets.UTF_8);
如果文件不存在,则会新建该文件,
具体使用时,该对象的函数和System.out
对象基本相同,也可以使用println
等方法
import java.util.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
String filePath = "a.txt";
try (PrintWriter out = new PrintWriter("a.txt", StandardCharsets.UTF_8);) {
out.println("adasdsadsa");
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
同样,使用该对象也需要增加异常处理,对IOException进行抛出
对于上面的情况,如果我们不像进行异常处理,可以告知编译器我们已经知道可能出入输入或输出异常,这样就不
会因为未进行异常处理而出现错误了
import java.util.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) throws IOException {
String filePath = "a.txt";
PrintWriter out = new PrintWriter("a.txt", StandardCharsets.UTF_8);
out.println("adasdsadsa");
}
}
1.3带标签的循环
与c++不同,java中没有goto,而是增加了标签
具体的使用如下:
import java.util.*;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
label: for (int i = 1; i <= 2; i++) {
System.out.println(i);
if (i == 1) {
break label;
}
}
}
}
label是我们选中的标签名,利用标签我们可以实现一次break跳出多重循环,break将跳转
到冒号后的循环的外层
1.4 大数
如果整数和浮点数的精度不能符合要求,我们可以选取java.math包中包含的两个很有用的
类,BigInteger
和BigDecimal
这两个类可以处理包含任意长度的数字序列的数值,前者
是任意精度的整数,后者是任意精度的浮点数。
使用静态的valueOf
方法可以将整形变为大数:
BigInteger a= BigInteger.valueOf(100);
如果需要的数过大,纯数字字面量无法存储,可以使用带字符参数的构造器。
import java.util.*;
import java.io.*;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
BigInteger a= new BigInteger("1111111111111111111111111111111111111111111111")
}
}
我们在大数运算时不能使用+
或者*
直接去处理,应该去使用大数类的add
或者multiply
方法,(感觉或许底层实现是高精度算法?)如果在c++中,我们可以通过重载运算符去实现直
接使用+ 或者***** 但在java中无法实现。
以下是一些常用的大整数类的方法:
BigInteger c= a.subtract(b);
a,b,c都是大数类型,该方法为减法操作,返回的值是c=a-b
divide()
方法用于做触发,用法和上面相同
mod()
从名字也能看出,该方法是做模运算的
sqrt()
做开方
和之前的String类一样,大整数之间要是想要去比较,也是不能使用==
的,这样比较的是两
个大数对象存储的位置是否相同,想要比较两个大整数的值的大小,需要使用
compareTo()
方法,如果调用该方法的大整数与另一个大整数相等,则返回0,如果这个
大整数小于另一个大整数,则返回负数,否则返回正数。
大实数的方法与大整数相同,就不加赘述了
1.5 数组
在java中数组的定义与c++存在区别,定义的方式如下:
import java.util.*;
import java.io.*;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
int[] a = new int[10];
var b = new int[10];
}
}
a和b都是一个长度为10的数组。
也可以在定义过程中直接初始化,甚至不用指定长度和使用new
import java.util.*;
import java.io.*;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 5 };
}
}
在java中允许空数组的出现,但需要注意,空数组不等同于null
标签:java,Scanner,基础,util,import,public,se,nio From: https://www.cnblogs.com/rpup/p/18091956