变量

变量包括:变量类型、变量名和存储的值。

每个变量必须先声明后使用

变量只有在其作用域内才有效(变量的作用域:其定义所在的一对{ }内)。

变量初始化

在Java中可以将声明放在代码中的任何地方

例如:

  1. double salary=65000.0;
  2. System.out.println(salary);
  3. int vacationDays=12;//OK to declare a variable here

如果可以从变量的初始位置推断出他的类型,就不再需要声明类型。只需要使用关键字var而无需指定类型:

  1. var vacationDays=12;//vacationDays is an int
  2. var greeting="Hello";//greeting is a String

Java定义的数据类型:

image.png

按照声明的位置不同加以区分:

image.png

在方法体外,类体内声明的变量称为成员变量。

在方法体内声明的变量称为局部变量。

1、整型(byte、short、int和long)

Java的整形常量默认为int型,声明long型常量须后加大写或小写的L。

注:Java程序中变量通常为int型除非不足以表达更大的数才使用long。

image.png

2、浮点型(float和double)

浮点型常量有两种表达方式:十进制数形式:如5.12 512.0f

科学计数法形式:如5.12e2 512E2 100E-2

float:单精度,尾数可以精确到7位有效数字(难以满足平时需求)

double:双精度,精度是float的两倍(平时常用)

注:Java的浮点型常量默认为double型,声明float型常量,须在后加‘f’或‘F’。没有后缀F的浮点数值(如3.14)总是默认为double类型

3、字符型(char)

一个字符可以存储一个字母,一个汉字

三种表现形式:

  • 字符常量使用形式如:char c1=’a’ char c2=’中’(必须用单引号将字符括起来)
  • Java中还有转义字符 ‘’ 将其后的字符转变为特殊字符常量,charc3=’\n’, ‘\n’表示换行符 ‘\t’为tab符
  • 直接使用Unicode值来表示字符型常量:’\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a表示\n

4、布尔型(boolean)

只能取两个值之一:true、false

常用于循环结构和条件判断

5、字符串(String)

注:String为引用数据类型

使用方法与基本数据类型一致:例如:String str=”abcd”;

一个字符串可以拼接另一个字符串,也可直接串接其他数据类型,如:

  1. str=str+"xyz";
  2. int n=100;
  3. str=str+n;

注:变量名中所有的字符都是有意义的,并且大小写敏感

6、常量

常量的值被设定后再程序运行过程中不允许被改变,只能被赋值一次,不能再更改,惯例上常量名使用全大写

语法:final 常量名=值

注:常量名一般使用大写字符

7、Java输入

  1. // 通过 `Scanner` 类获取控制台输入流
  2. Scanner scanner = new Scanner(System.in);
  3. // 获取控制台输入的一个字符串
  4. String s = scanner.next();

例:

  1. Scanner myscanner = new Scanner(System.in);// 通过 `Scanner` 类获取控制台输入流
  2. Character character = myscanner.next().charAt(0);//得到输入字符串的第一个字符
  3. int ascii = character;//得到字符的ASCII码
  4. System.out.println(ascii);//输出ASCII码
  • 读取一行的输入
    nextLine
  • 读取一个整数
    nextInt
  • 读取下一个浮点数
    nextDouble
  • 读取输入的下一个单词(以空格作为分隔符)
    next
  • 检测输入中是否还有其他单词
    boolean hasNext
  • 检测是否还有下一个表示整数或浮点数的字符序列
    boolean hasNextDouble

8、格式化输出

System.out.print(x)

  1. double x=10000.0/3.0;
  2. System.out.print(x);

输出为:3333.33333333

printf()

  1. System.out.printf("%8.2f",x);
  2. System.out.printf("Hello,%s.Next year,you'll be %d",name,age);

另外,还可以指定控制格式化输出外观的各种标志。例如:

  1. System.out.printf("%,.2f",10000.0/3.0);

打印结果为:3,333.33

标志 目的 示例
+ 打印正数和负数的符号 +3333.33
空格 在正数之前添加空格 | 3333.33|
0 数字前面补0 003333.33
- 左对齐 |3333.33 |
( 将负数括在括号内 (3333.33)
, 添加分组分隔符 3,333.33
# 对于f格式,包含小数点 3,333.
# 对于x或0格式,添加前缀0x或0 0xcafe
< 格式化前面说明的数值。例如,%d<x将以十进制和十六进制打印同一个数值 159 9F
$ 指定要格式化的参数索引。例如

打印当前的日期和时间

例如:

  1. System.out.printf("%tc",new Date());

变量 - 图4

某些格式只给出了指定日期的部分信息,如果需要多次提供日期来分布格式化每一部分就太笨拙了,所以,可以用一个格式字符串指示要格式化的参数索引。索引必须紧跟在%后面,并以$终止。例如:

  1. System.out.printf("%1$s %2$tB %2$tB ")

打印结果为:Due date: February 9,2015

还可以选择使用<标志。它指前面格式说明中的参数将被再次使用。例:

  1. System.out.printf("%s %tB %<te %<tY","Due date",new Date());

注意:参数索引从1开始,而不是从0开始,%1$…对第一个参数格式化。这就避免了与0标志混淆

9、文件输入与输出

读取文件

要想读取一个文件,需要构造一个Scanner对象,例如:

  1. Scanner in =new Scanner(Pth.of("myfile.txt"),StandardCharsets.UTF-8);

注:如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前

再额外加一个额外的反斜杠转义:”C:\ \mydirectory\ \myfile.txt”。

写入文件

要想写入文件,就需要构造一个PrintWriter对象。在构造器(constructor)中,需要提供文件名和字符编码。例:

  1. PrintWriter out=new PrintWriter("myfile.txt",StandardCharsets.UTF-8);

如果文件不存在,创建该文件

Scanner方法

  1. Scanner(Path p,String encoding)
  2. 构造一个使用给定字符编码从给定路径读取数据的Sacanner
  3. PrintWriter(String fileName)
  4. 构造一个将数据写入文件的PrintWriter。文件名由参数指定
  5. static Path of(String pathname)
  6. 根据给定的路径名构造一个Path