一、使用Scanner类进行控制台的输入
文档中Scanner类的定义为A simple text scanner which can parse primitive types and strings using regular expressions(一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器)。
使用Scanner类,首先要导入 import.util.Scanner;
然后建立对象 Scanner scan = new Scanner(System.in);
然后就可以接收控制台输入的各种数据类型了。
比如:
int x = scan.nextInt();
String s = scan.next();
String s = scan.nextLine();
(next和nextLine的区别是,前者接收的字符串到第一个空格为止,后者接收的字符串可以包含空格,到回车为止)
double d = scan.nextDouble();
如果想输入一个字符,可以利用字符串的charAt(index)方法。
例如,char ch = scan.next().charAt(0);
二、字面量
Java中,字面量(literal)是指以人类语言形式出现的固定值。例如100,‘a’等。
Java中,字面量可以是任何基本数据类型。
默认情况下,整数字面量是int类型的,浮点字面量是double类型的,而这会带来一些麻烦。
例如:
1、float f = 0.1; 这个语句是通不过编译的,因为字面量0.1是double类型的,赋给float类型后,精度有所损失。
改为float f = (float)0.1; 即可。
2、接着上面的例子,f = f + 0.1;也是通不过编译的,原因同上,但神奇的是 f += 0.1; 是可以通过编译的。加完后,f仍然是float类型。
3、整数的在不超出类型表示范围内,遵循自动类型转换,例如byte b = 1; 和 short s = 100; 都是可以通过编译的。
三、Java基本数据类型中需要注意的一些地方
1、boolean类型不能用0和1表示,这是不同于C语言的地方,切记,切记,切记,重要的事情说三遍。
2、字符变量赋值时的各种花式
char ch = 'A'; char ch = '啊'; char ch = '\u655f';(这里用16进制数表示一个汉字的编码,在java的jdk下的bin目录里,有一个叫native2ascii.exe的程序,可以显示汉字编码) char ch = 3; char ch = '\123';(\后跟的是一个8进制数,数值代表着ASCII码,单引号不可省)。
3、关于无穷
Java中将正负无穷定义为浮点数,正无穷为POSITIVE_INFINITY,负无穷为NEGATIVE_INFINITY,用一个正浮点数除以0,得到正无穷,用一个负浮点数除以0,得到负无穷。如果是整数除以0,则会抛出ArithmeticException
四、常量
final int i = 123;
关于常量需要注意的是两条编码规范:1、常量名字一律大写,用下划线分割单词。 2、常量声明时就赋值。
五、关于自增自减符号
int i = 1;
i = (i++)+(++i); (结果为1+3=4)
i++和++i 作为独立语句出现时,没有任何区别,但当它们作为一个表达式的一部分时,就不同了。i++是将 i 的值作为表达式的值,然后i再增1;++i是将i先增1,然后将增1后的值作为表达式的值。
六、条件表达式的嵌套
exp1 ? exp2 : exp3;
exp1为Boolean表达式,它为true则整个表达式取exp2的值,它为false则取exp3的值。
如上,条件表达式就相当于if-else,下面用一个题目来实际应用一下条件表达式
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
grade = x >=90 ? 'A' : (x>=60 ? 'B' : 'C')
七、Java变量的作用域
1、一对花括号就是一个代码块,Java允许变量在任何代码块中声明。
2、一个代码块就是一个作用域。
3、作用域可以嵌套
class ScopeDemo{ public static void main(String[] asgs){ int x; x = 10; if(x==10){ int y = 20; System.out.println("x and y:"+ x + " " + y ); x = y * 2; } //y = 100; //error!!! y在这里是不可知的,这一点和C/C++是一致的 x *= 2; } };
4、内部作用域声明的变量不能与包含它的作用域中已经声明的变量同名。(这一点和C/C++不同)
在C++中,这样的程序是可以编译运行的
#include <iostream> using namespace std; int main(){ ; ){ ; cout<<"x = "<<x<<endl; //输出20 x = x * ; } cout<<"x = "<<x<<endl; //输出10 ; }