JAVA基本语法[新手向]
0.JAVA安装配置
可看我之前的博客
JAVA安装与配置
1. 数据类型
Java是一种要求很严格的语言,每一个变量你必须为他声明一种变量类型。
在Java中一共有8中基本类型,4个大类。4种整型,2种浮点型,1中char型和一个bollean类型
1.1 整型
整型是用来表示整数,正数和负数以及0都可用整型表示。Java提供了四种整型
类型 | 字节数 | 取值范围 | 示例 |
---|---|---|---|
byte | 1字节 | -128~127 | byte a = 1 |
short | 2字节 | -32 768~32 767 | shotr a = -123 |
int | 4字节 | -2 147 483 648~2 147 483 647 | int a = 3244 |
long | 8字节 | -9 223 372 036 854 775 808~9 223 372 036 854 775 807 | long a = 12349723456 |
1.2 浮点型
浮点型是用来表示有小数部分的数值。Java提供了两种浮点型
类型 | 字节数 | 取值范围 | 示例 |
---|---|---|---|
float | 4字节 | 大约±3.402 823 47E+38F(有效位数为6~7位) | float a = 1234.2342 |
double | 8字节 | 大约±1.797 693 134 862 315 70E+308(有效位数为15位) | double a = 12421442.2341412341 |
1.3 char型
在C语言中都知道char型代表一个字符,它占1个字节,而且英文字母以及常见符号都是用ASCII码表示的。
但是在Java中,情况有所改变。
Java中,汉字、英文字符、符号都是用Unicode码来表示,一个Unicode码是16位,所以一个Unicode码占两位。但是英文字母比较特殊,源自于8位ASCII码,于是在Unicode码仅使用了低8位就可以表示,高8位的话不使用也无所谓。
所以
char ENstr = 'a';//这个ENstr就一个字节,英文字母只需要8位
char CNstr = '中';//这个CNstr就两个字节,中文需要16位
char还能用来表示一些转义序列,如表
转义序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\” | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\|反斜杠 | \u005c |
1.4 boolean类型
boolean只有两个值true和 false。整型值和Boolean值不能直接进行相互转换
2. 变量
在Java中,每个变量都有一个类型。声明变量时,类型位于变量之前。
例如:
int a;
float b;
double c;
char d;
变量声明基本都是类型+变量名+初始化语句(可写可不写)+’ ; ‘(因为变量声明是一个语句,所以这个;必不可少)。
变量名必须是一个以字母为开头并以字母或数字构成的序列。但是Java字母包含的范围较大,除了常见的’a’~’z’,’A’~’Z’以外,还有’ _ ‘、’$’以及其他在某种语言中表示字母的任何Unicode字符。同样,数字也包含’0’~’9’以及在其他语言中表示数字的Unicode字符。但是空格以及其他字符是不能出现在变量名中的,空格也不行!!!变量名大大小写敏感,如a和A就不是同一个变量。变量名长度基本没限制。此外,不能用Java保留字作为变量名。(Java保留字可参考Java语言的关键字(保留字))
2.1 变量初始化
变量初始化一般时两种方法
1. 声明变量,之后再初始化
int a;
a = 1;
- 声明变量的同时初始化
int a = 1;
Java中没对变量的初始化做严格要求,只需要你在声明变量之后、使用变量之前进行初始化就行了。
但是变量的声明尽可能的靠近第一次使用的地方,这是一种良好的习惯。
2.2 常量
在Java中,使用final用来表示常量。如
final int count = 0;
关键字final表示这个变量只能被赋值一次,而且赋值后,就不能对其值进行更改。习惯上,常量名用全大写
3. 运算符
在Java中,使用运算符+、-、*、/、%来表示加、减、乘、除、取余。
当参与/运算的数都是整数时,表示整数除法,不然表示浮点数除法。
3.1数值之间的类型转换
又时候两个不同类型的值进行运算的时候,Java会对他们进行自动转换
3.2强制类型转化
有的时候,需要把int转为double或者把double转为int。这个时候就需要强制转换了。强制类型转换的语法是在圆括号中给出想要转换的目标类型,后面紧跟带转换的变量名。如
double x = 9.997;
int nx = (int)x;
这样,nx的值就为9。
3.3结合赋值和运算符
可以使用二元运算符+=、-=、*=、/=。如
x += 4;//相当于
x = x + 4;
x -= 4;//相当于
x = x - 4;
x *= 4;//相当于
x = x * 4;
x /= 4;//相当于
x = x / 4;
3.4自增与自减
自增就是让变量+1。自减就是让变量减1。
如
int a = 0;
a++;//a自增
++a;//a自增
a--;//a自减
--a;//a自减
a++就是指a加上1,但是此时表达式用的是a+1之前的值
++a也是指a加上1,但是此时表达式用的是a+1之后的值
int[] a = new int[10];
int[] b = new int[10];
int i, x = 0;
for( i = 0; i < 10; i++ )
{
a[x++] = i;
b[++x] = i;
/*
当i=0时,a[x++]此时虽说x已经加上了1,但是此时a[x++]中的值仍然还是加上1之前的值,也即是说此时a[x++]的真是面目是a[0],而x=1;
再看b[++x],此时x已经加上了1,而且因为++在前面,所以此时用的是x加1之后的值,也就是说此时b[++x]的真是面目是b[1],x=1;
自减运算符--同理
*/
}
3.5 三目运算符
三目运算符为一个判断的运算符。格式为
condition ? expression1 : expression2;
判断表达式condition,如果成立,就执行expression1,否则执行expression2。如
a>b ? max = a : max = b;//当a>b,把a的值赋给max,否则把b的值赋给max;
System.out.println("max="+max);//输出语句,会在屏幕上打印“max=”以及max的值
3.6括号与运算符优先级
运算符优先级
运算符 | 结合性 |
---|---|
[].() | 从左往右 |
! ~ ++ – +(一元运算) -(一元运算) ()(强制转换) new | 从右往左 |
* / % | 从左往右 |
|
从左往右 |
<< >> >>> | 从左往右 |
< <= > >= instanceof | 从左往右 |
== != | 从左往右 |
& | 从左往右 |
^ | 从左往右 |
| | 从左往右 |
|| | 从左往右 |
?: | 从右往左 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右往左 |
4. 字符串
字符串就是Unicode字符序列。例如“JAVA”就是由J、A、V、A这四个Unicode字符组成的。Java没有内置字符串类型,而是在标准Java类库中提供了一个预定的类——String。每个用双引号括起来的字符串都是String类的一个实例。如:
String e = "JAVA";//定义一个字符串e,并初始化为JAVA
System.out.println(e);//输出这个字符串,在屏幕上会出现"JAVA"
4.1拼接
String ex = "Expletive";//定义一个名为ex的字符串,并初始化为Expletive
String PG13 = "deleted";//定义一个名为PG13的字符串,并初始化为deleted
String message = ex + PG13;//现在message这个字符串的内容就是"Expletivedeleted"
4.2检测字符串是否相等
可以使用equals方法检测两个字符串是否相等。
String ex = "Expletive";//定义一个名为ex的字符串,并初始化为Expletive
String PG13 = "deleted";//定义一个名为PG13的字符串,并初始化为deleted
if ( ex.equals(PG13) )//当ex与PG13相等时,ex.equals(PG13)返回true否则返回false,此时两个字符串不相等,所以表达式的值为false,所以不会执行if中的语句
System.out.println("Yes");
关于String类的更多使用方法,自行百度即可。
5. 输入
要想通过控制台输入,首先需要构造一个Scanner对象,并于“标准缓冲输入流”System.in关联
Scanner in = new Scanner(System.in);
现在,就可以使用Scanner类的各种方法实现各种操作了。
如,我需要从键盘输入一个数字,并把这个数值赋给一个变量num。
Scanner in = new Scanner(System.in);
int num = in.nextInt();
需要读入一个单词
Scanner in = new Scanner(System.in);
String s = in.nextLine();//读入一整行
String a = in.next();//读入一个单词,遇空格停止
Scanner类
* String nextLine()
读取下一行
* String next()
读取下一个单词(遇空格停止)
* int nextInt()
读取下一个整型
* double nextDouble()
读取下一个浮点型
6. 输出
6.1 println
在前面我们看见很多地方需要输出的时候都有这么一行
System.out.println(...);
这条的目的就是把括号中的内容打印到屏幕上并把光标移动到下一行。如
System.out.println("Helloworld");//打印Helloworld并换行
System.out.println(1+2);//计算1+2的值并打印然后换行
System.out.println("Helloworld"+1+2);//打印Helloworld以及1+2的值并换行
大家可以用自己的电脑试着改变括号中的内容,看他是如何打印的。
6.2 printf格式化输出
一看到printf,相比很多学过C的同学就不会陌生了,Java中的printf和C中的printf几乎一样,学过C的同学就没必要再看了。
printf,也叫格式化输出,他比println少了更多的自由性,他讲究格式,并且要求十分严格。都是个人感觉在代码中他比println更方便阅读。
在printf中,可以使用多个参数,如
int a = 6;
char c = 'a';
System.out.printf("%d %s %c ",a,"Hello",c);
这段代码执行结果就是6Helloa。
每一个以%开始的格式说明符都用相应的参数替换。如下表
转换符 | 类型 | 举例 |
---|---|---|
d | 十进制整数 | 159 |
x | 十六进制整数 | 9f |
o | 八进制整数 | 237 |
f | 定点浮点数 | 15.9 |
e | 指数浮点数 | 1.59e+01 |
g | 通用浮点数 | - |
a | 十六进制浮点数 | 0x1.fccdp3 |
s | 字符串 | Hello |
c | 字符 | H |
b | 布尔 | True |
h | 散列码 | 42628b2 |
tx或Tx | 日期时间(T强制大写) | 已经过时,应当改用java.time类 |
% | 百分号 | % |
n | 与平台有关的行分隔符 | —— |
另外,printf还有控制格式化输出的各种标志,如下表
标志 | 目的 | 举例 |
---|---|---|
+ | 打印正数和负数符号 | +3333.33 |
空格 | 在整数之前添加空格 | |3333.33| |
0 | 数字面前补0 | 003333.33 |
- | 左对齐 | |3333.33 | |
( | 将负数括在括号内 | )3333.33) |
, | 添加分组分隔符 | 3,333.33 |
#(对于f格式) | 包含小数点 | 3,333. |
#(对于x或者0格式) | 添加前缀0x或0 | 0xcafe |
7. 注释
7.1单行注释
//
//此注释即为单行注释,此注释只能使用一行,如果换行了, 那么换行之后的内容就不属于注释里面的内容了
7.2多行注释
/* */
/*此注释为多行注释,他停止符只有一个,那就是*/
/*
* 一旦遇到(终止符),注释就停止,剩下的内容就不属于注释
* 不可嵌套
*/
/*大幅阿斯蒂芬
/*阿斯蒂芬
*/呵呵*/
//看“呵呵”的颜色就能看出他和注释内容的颜色不同,所以“呵呵”已经不属于注释了
7.3 文档注释
/** */
/**
*/
/*
* 此注释为文档注释,他能自动的生成一个文档,它以“/**”开始,以(星杠)结束
* 这种注释我也不太懂,麻烦请自行百度
*/