首页 > 编程语言 >java se 基础

java se 基础

时间:2024-03-25 11:57:25浏览次数:33  
标签:java Scanner 基础 util import public se nio

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,其次必须

做处理异常,即使用trycatch否则会报错

如果我们直接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包中包含的两个很有用的

类,BigIntegerBigDecimal这两个类可以处理包含任意长度的数字序列的数值,前者

是任意精度的整数,后者是任意精度的浮点数。

使用静态的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

相关文章

  • non constant or forward reference address expression for section .ARM.extab 错误
    编译时报错:FAILED:STM32F103RET6_Test001.elfcmd.exe/C"cd.&&D:\ProgramFiles\gcc-arm-none-eabi\bin\arm-none-eabi-gcc.exe-g-Wl,-gc-sections,--print-memory-usage,-Map=D:/ProjectCode/CLion/test/STM32F103RET6_Test001/cmake-build-debug-arm-......
  • ElasticSearch8 - SpringBoot整合ElasticSearch
    前言springboot整合ES有两种方案,ES官方提供的ElasticsearchJavaAPIClient和spring提供的[SpringDataElasticsearch](SpringDataElasticsearch)两种方案各有优劣Spring:高度封装,用着舒服。缺点是更新不及时,有可能无法使用ES的新APIES官方:更新及时,灵活,缺点是......
  • Base64编解码及C++代码实现
    1.Base64是什么?        Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。        例如字符串mickey0380对应的Base64为bWlja2V5MDM4MA==。其中那个=......
  • 【MATLAB源码-第13期】基于matlab的4ASK的误码率BER和误符号率SER理论和实际对比仿真
    操作环境:MATLAB2022a1、算法描述"4ASK"是一种数字调制技术,代表4级振幅移移键控(4-LevelAmplitudeShiftKeying)调制。它是一种数字通信中常用的调制方式之一,用于将数字信号转换为模拟信号以便传输,或者将模拟信号转换为数字信号以便处理。在4ASK调制中,每个数字比特被映射......
  • drf : 请求(Request)与响应(Response),全局设置和局部设置drf的默认配置项。
    请求(Request)与响应(Response)请求(Request),当次的HTTP响应请求到Django中被封装成python中的对象request.data-POST,PUT请求的数据request.query_params-GET请求的数据RESTframework传入视图的request对象不再是Django默认的HttpRequest对象,而是RESTframework提供的......
  • 一文让你读懂JavaScript原型对象与原型链的继承
    前言有些新手朋友可能听说过这么一句话,就是js中存在两个链条,它们分别为:作用域链和原型链它们彼此的区别在于作用域链是为了访问变量和数据而存在的一种链条访问机制而原型链是访问对象的属性或者方法而存在的一种机制!其中这里的原型链就是今天我要说的主题!我们学习js必须......
  • Problem Set #2
    书接上回14.P10253说唱题目这题怎么只有蓝的(我们考虑将答案写成位数的形式\((Ans=x_1x_2...x_n)\)那么我们考虑将\(y=\sum_ix_i\frac{10^{n-i+1}-1}{9}\)\(9y=\sum_ix_i(10^{n-i+1}-1)\)\(9y+\sumx_i=10\sum_ix_i10^{n-i}\)因为\(\sumx_i\leq5\times10^5......
  • 栅格地图路径规划:基于螳螂搜索算法(Mantis Search Algorithm,MSA)的机器人路径规划(提供MA
        一、机器人路径规划介绍移动机器人(Mobilerobot,MR)的路径规划是移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人......
  • IT24765: TIMING ISSUE IN PACKAGE CACHE WORKSPACE MAY CAUSE PANIC
    IT24765:TIMINGISSUEINPACKAGECACHEWORKSPACEMAYCAUSEPANIChttps://www.ibm.com/mysupport/s/defect/aCI0z0000004vGZ/dt076912?language=fiDescriptionThere is a timing issue where there is a brief moment in time   that the state of ......
  • 从静态到动态化,Python数据可视化中的Matplotlib和Seaborn
    本文分享自华为云社区《Python数据可视化大揭秘:Matplotlib和Seaborn高效应用指南》,作者:柠檬味拥抱。安装Matplotlib和Seaborn首先,确保你已经安装了Matplotlib和Seaborn库。如果没有安装,可以使用以下命令进行安装:pipinstallmatplotlibseabornMatplotlib基础Matplotlib是......