java基础语法
1. 注释
单行注释**(ctrl+/)**
public class Holleworld {
public static void mian(String[] args){
//单行注释
System.out.println("Holle World");
}
}
多行注释**(ctrl+shift+/)**
public class Holleworld {
public static void mian(String[] args){
/* 多行
注释*/
System.out.println("Holle World");
}
}
文档注释 (/** */)
public class Holleworld {
public static void mian(String[] args){
/** 文档
* 注释
* 输出 Holle world
*/
System.out.println("Holle World");
}
}
2. 标识符
关键字
注意
关于 Java 标识符,有以下几点需要注意:
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
3. 数据类型
八大基本数据类型
public class Demo01 {
public static void main(String[] args){
//八大基本数据类型
//整数
int num1 = 20;//最常用
byte num2 = 20;
short num3 = 20;
long num4 = 20L;//long类型要在后面加一个L
//浮点数,小数
float num5 = 10.1F;//float类型要在后面加一个F
double num6 = 3.1415;
//字符
char name1='国';//只能一个字符
//字符串,String不是关键字,类
String name2="中国";
//布尔值:是非
boolean flag1 = true;
boolean flag2 = false;
}
}
整数拓展
进制
public class Demo02 {
public static void main(String[] args){
//整数扩展: 进制:二进制0b,八进制0,十进制,十六进制0x
int a = 11;//十进制
System.out .println(a);//输出结果为11
int b = 011;//八进制0
System.out.println(b);//输出结果为9
int c = 0x11;//十六进制0x
System.out.println(c);//输出结果为17
}
}
浮点数拓展
最好完全避免使用浮点数进行比较(浮点数属于近似值,在系统中运算后的结果可能与实际有偏差)
public class Demo02 {
public static void main(String[] args){
//浮点数拓展
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f==d);//输出结果为false
float f1 = 2232424234432f;
float f2 = f1+1;
//最好完全避免使用浮点数进行比较
System.out.println(f1==f2);//输出结果为true
}
}
字符拓展
char型
- char 类型是一个单一的 16 位 Unicode 字符;
- 最小值是 \u0000(十进制等效值为 0);
- 最大值是 \uffff(即为 65535);
- char 数据类型可以储存任何字符;
public class Demo02 {
public static void main(String[] args){
//所有的字符本义都是数字
char c1 = 'A';
char c2 = '中';
System.out.println(c1);//输出结果为A
System.out.println((int)c1);//强制转换
//输出结果为65
System.out.println(c2);//输出结果为中
System.out.println((int)c2);//强制转换
//输出结果为20013
char c3 = '\u0061';
char c4 = 97;//字符a在Unicode表中的排序为97
char c5 = 'a';
System.out.println(c3);//输出结果为a
System.out.println(c4);//输出结果为a
System.out.println(c5);//输出结果为a
}
}
转义字符
转义字符(ASCII码值【十进制】) | 意义 |
---|---|
\b(008) | 退格(BS),将当前位置移到前一列 |
\f(012) | 换页(FF),将当前位置一道下页开头 |
\n(010) | 换行(LF),将当前位置移到下一行开头 |
\r(013) | 回车(CR),将当前位置移到本行开头 |
\t(009) | 水平制表(HT)(跳到次啊一个TAB位置) |
\\(092) | 代表一个反斜字符\ |
\’(039) | 代表一个单引号(撤号字符) |
\"(034) | 代表一个双引号字符 |
?(063) | 代表一个问号 |
\0(000) | 空字符(NULL) |
\ddd(三位八进制) | 1到3位八进制数所代表的任意字符,如\456 |
\xhh(十六进制) | 十六进制所代表的任意字符,如、u0052 |
布尔值拓展
public class Demo02 {
public static void main(String[] args){
boolean flag = true;
if (flag==true){//新手
System.out.println("对的");//输出结果为对的
}
if (flag){//老手,默认是对的
System.out.println("对的");//输出结果为对的
}
}
4. 类型转换
转换规则
强制转换 (类型)变量名 高——低
自动转换 低——高
数据类型转换必须满足如下规则:
-
\1. 不能对boolean类型进行类型转换。
-
\2. 不能把对象类型转换成不相关类的对象。
-
\3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
-
\4. 转换过程中可能导致溢出或损失精度,例如:
int i =128; byte b = (byte)i;
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
-
\5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23; (int)-45.89f == -45
代码实例
public class Demo03 {
public static void main(String[] args){
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int year = 20;
//错误处理:
int total1 =money*year;//计算的时候溢出了
System.out.println(total1);//输出结果为-1474836480
//错误处理:
long total2 =money*year;//默认是int,转换之前就已经存在问题了
System.out.println(total2);//输出结果为 -1474836480
//正确处理:
long total3 =money*((long)year);//先把一个数转换为Long
System.out.println(total3);//输出结果为20000000000
}
}
5. 变量和常量
变量的定义
int a, b, c; // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22; // 声明并初始化 z
String s = "runoob"; // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x'; // 声明变量 x 的值是字符 'x'。
变量类型
Java语言支持的变量类型有:
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。
简单代码
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
复杂代码
public class Demo04 {
//类变量 static
static double salary = 2500;
//属性:变量
//实例变量:从属于对象;
String name;
int age;
//main方法
public static void main(String[] args){
//局部变量;必须声明和初始化值;如果不自行初始化,这个类型的默认值为 0 ,0.0
//布尔值,默认为false
//除了基本类型,其余都是null
int i =10;
System.out.println(i);//输出结果为10
//变量类型 变量名字 = new Demo04();
Demo04 demo04 = new Demo04();
System.out.println(demo04.age);//输出结果为0
System.out.println(demo04.name);//输出结果为null
//类变量 static
System.out.println(salary);//输出结果为2500.0
}
//其他方法
public void add(){
}
}
常量
public class Demo05 {
//修饰符,不存在先后顺序
static final double PI = 3.14;//final static double PI = 3.14;
public static void main(String[] args){
System.out.println(PI);
}
}
变量的命名规则
6. 基本运算符
算术运算符
A=10,B=20
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 - 相加运算符两侧的值 | A + B 等于 30 |
- | 减法 - 左操作数减去右操作数 | A – B 等于 -10 |
* | 乘法 - 相乘操作符两侧的值 | A * B等于200 |
/ | 除法 - 左操作数除以右操作数 | B / A等于2 |
% | 取余 - 左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增: 操作数的值增加1 | B++ 或 ++B 等于 21(区别详见下文) |
– | 自减: 操作数的值减少1 | B-- 或 --B 等于 19(区别详见下文) |
package base;
public class Dome06 {
public static void main(String[] args) {
//++ -- 自增 自减 一元运算符
int a = 3;
int b = a++;//执行完这行代码后,先给b赋值,再自增
//a = a+1;
System.out.println(a);//输出结果是4
//a = a+1;
int c = ++a;//执行完这行代码前,先自增,再给b赋值
System.out.println(a);//输出结果是5
System.out.println(b);//输出结果是3
System.out.println(c);//输出结果是5
//幂运算 2^3 2*2*2 = 8 很多运算,我们会使用一些工具来操作
final double pow = Math.pow(2, 3);
System.out.println(pow);//输出结果是8.0
}
}
关系运算符
A=10,B=20:
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
逻辑运算符
A=ture,B=false:
操作符 | 描述 | 例子 |
---|---|---|
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | | B)为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B)为真。 |
位运算符
A =60 ,B = 13:
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
package base;
public class Demo07 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
2*8=16 ---2*2*2*2
效率极高!!!
<< *2
>> /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);//输出结果是16
}
}
赋值运算符
操作符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
<< = | 左移位赋值运算符 | C << = 2等价于C = C << 2 |
>> = | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 |
&= | 按位与赋值运算符 | C&= 2等价于C = C&2 |
^ = | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 |
| = | 按位或赋值操作符 | C | = 2等价于C = C | 2 |
package base;
public class Demo08 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;// a=a+b;
a-=b;// a=a-b;
System.out.println(a);//输出结果是10
//字符串连接符" +" ,String
System.out.println(""+a+b);//输出结果是1020
//知道前面是“”(空字符),默认为String类型,a和b直接连接在一起
System.out.println(a+b+"");//输出结果是30
// 在后面,先运行了a+b
}
}
条件运算符(?:)
三元运算符
x ?y :z ————如果x是TRUE的话,则结果为y,否则是z
package base;
public class Demo09 {
public static void main(String[] args){
int a , b;
a = 10;
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
System.out.println( "b的值为 : " + b );//输出结果为 b的值为 : 30
}
}
运算符的优先级
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr– | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
7. 包机制
放包的位置
包语句
package com .kuang.base;
导入包的类
import com .kuang.base.Demo01;
导入这个包下的所有类
import com .kuang.base.*;
8. JavaDoc生成文档
网上jdk帮助文档
网上链接:
Overview (Java Platform SE 8 ) (oracle.com)
编写 Doc.java 代码
package base;
/**
* @author Cenguojie
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/**
* @author Cenguojie
* @param name
* @return
* @throws Exception
*/
public String testma(String name) throws Exception{
return name;
}
}
通过命令行创建JavaDoc文档
- 找出Doc.java 所在的文件夹
- 打开cmd
- 运行 javadoc -encoding UTF-8 -charset UTF-8 Doc.java
- 在生成新文件中,打开index.html
- 能看到Doc.java 的文档
通过IDEA创建JavaDoc文档
第一步:
第二步:
-
选择是整个项目还是模块还是单个文件
-
文档输出路径
-
Locale 选择地区,这个决定了文档的语言,中文就是zh_CN
-
传入JavaDoc的参数,一般这样写 -encoding UTF-8 -charset UTF-8 -windowtitle “文档HTML页面标签的标题” -
第三步: