变量
变量包括:变量类型、变量名和存储的值。
每个变量必须先声明后使用
变量只有在其作用域内才有效(变量的作用域:其定义所在的一对{ }内)。
变量初始化
在Java中可以将声明放在代码中的任何地方
例如:
double salary=65000.0;
System.out.println(salary);
int vacationDays=12;//OK to declare a variable here
如果可以从变量的初始位置推断出他的类型,就不再需要声明类型。只需要使用关键字var而无需指定类型:
var vacationDays=12;//vacationDays is an int
var greeting="Hello";//greeting is a String
Java定义的数据类型:
按照声明的位置不同加以区分:
在方法体外,类体内声明的变量称为成员变量。
在方法体内声明的变量称为局部变量。
1、整型(byte、short、int和long)
Java的整形常量默认为int型,声明long型常量须后加大写或小写的L。
注:Java程序中变量通常为int型除非不足以表达更大的数才使用long。
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”;
一个字符串可以拼接另一个字符串,也可直接串接其他数据类型,如:
str=str+"xyz";
int n=100;
str=str+n;
注:变量名中所有的字符都是有意义的,并且大小写敏感
6、常量
常量的值被设定后再程序运行过程中不允许被改变,只能被赋值一次,不能再更改,惯例上常量名使用全大写
语法:final 常量名=值
注:常量名一般使用大写字符
7、Java输入
// 通过 `Scanner` 类获取控制台输入流
Scanner scanner = new Scanner(System.in);
// 获取控制台输入的一个字符串
String s = scanner.next();
例:
Scanner myscanner = new Scanner(System.in);// 通过 `Scanner` 类获取控制台输入流
Character character = myscanner.next().charAt(0);//得到输入字符串的第一个字符
int ascii = character;//得到字符的ASCII码
System.out.println(ascii);//输出ASCII码
- 读取一行的输入
nextLine
- 读取一个整数
nextInt
- 读取下一个浮点数
nextDouble
- 读取输入的下一个单词(以空格作为分隔符)
next
- 检测输入中是否还有其他单词
boolean hasNext
- 检测是否还有下一个表示整数或浮点数的字符序列
boolean hasNextDouble
8、格式化输出
System.out.print(x)
double x=10000.0/3.0;
System.out.print(x);
输出为:3333.33333333
printf()
System.out.printf("%8.2f",x);
System.out.printf("Hello,%s.Next year,you'll be %d",name,age);
另外,还可以指定控制格式化输出外观的各种标志。例如:
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 |
$ | 指定要格式化的参数索引。例如 |
打印当前的日期和时间
例如:
System.out.printf("%tc",new Date());
某些格式只给出了指定日期的部分信息,如果需要多次提供日期来分布格式化每一部分就太笨拙了,所以,可以用一个格式字符串指示要格式化的参数索引。索引必须紧跟在%后面,并以$终止。例如:
System.out.printf("%1$s %2$tB %2$tB ")
打印结果为:Due date: February 9,2015
还可以选择使用<标志。它指前面格式说明中的参数将被再次使用。例:
System.out.printf("%s %tB %<te %<tY","Due date",new Date());
注意:参数索引从1开始,而不是从0开始,%1$…对第一个参数格式化。这就避免了与0标志混淆
9、文件输入与输出
读取文件
要想读取一个文件,需要构造一个Scanner对象,例如:
Scanner in =new Scanner(Pth.of("myfile.txt"),StandardCharsets.UTF-8);
注:如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前
再额外加一个额外的反斜杠转义:”C:\ \mydirectory\ \myfile.txt”。
写入文件
要想写入文件,就需要构造一个PrintWriter对象。在构造器(constructor)中,需要提供文件名和字符编码。例:
PrintWriter out=new PrintWriter("myfile.txt",StandardCharsets.UTF-8);
如果文件不存在,创建该文件
Scanner方法
Scanner(Path p,String encoding)
构造一个使用给定字符编码从给定路径读取数据的Sacanner
PrintWriter(String fileName)
构造一个将数据写入文件的PrintWriter。文件名由参数指定
static Path of(String pathname)
根据给定的路径名构造一个Path