IDEA使用
1. 常用快捷命令
- pstm
public static void main(String[] args) {
}
- sout
System.out.println("Hello World!!");
- Ctrl+D:复制当前行到下一行
2. 建空工程过程
File -> New -> Module(模块)
Java -> Next -> 名字:xx -> Finish
出现src文件夹。
找项目结构方法:File -> Project Structure.
Java基础语法
1. 注释、标识符、关键字
注释:不执行,相当于笔记。
在java中有三种注释:单行注释、多行注释、文档注释。
文档注释:
/**开头,*/结尾
可以加参数
标识符
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
!!注意
所有标识符都应以字母(AZ或az),美元符($)或下划线(_)开始。
首字母之后,可以为字母、美元符、下划线或数字的任意字符组合。
标识符是大小写敏感的(即,区分大小写)。
不能用关键字作变量名或方法名。
可以使用中文命名,但不建议。
关键字
2. 数据类型
强类型语言:要求变量的使用要严格符合规定,所有变量必须先定义后才能使用。eg:Java,C语言,C++等。
弱类型语言:变量的使用可以不符合规定。eg:JS,VB等。
Java的数据类型分为两大类
(1)基本类型(primitive type)
八大基本数据类型:
整数: int //最常用
byte
short
long //Long类型数字后加L
浮点数:float //float类型数字后加F
double
字符: char
//字符串,String表示关键字,是类
布尔值: boolean //默认值:false
1). 整数拓展–各进制表示方法:
二进制0b 八进制0 十进制 十六进制0x
2). JDK7新特性:数字之间可用下划线分割。
eg:
int money = 10_0000_0000;
//且在输出时,下划线不会被输出。
3). 浮点数拓展–float与double的特性:
float、double:表示字长有限、离散、舍入误差、大约、接近但不等于
eg:
/* 1 */
float f = 0.1f;//0.1
double d = 1.0/10;//0.1
System.out.println(f==d);//false
/* 2 */
float d1 = 2323123213132313f;
float d2 = d1 + 1;
System.out.println(d1==d2);//true
结论:最好完全使用浮点数进行比较。
使用BigDecimal(数学工具类)没有误差。
4). 字符扩展–Unicode编码表&转义字符:
①. Unicode编码表:
- 使用Unicode编码表时,一个字符占两个字节(ASCII码中,一个字符占一个字节)。第一个字节上,都是0.
- 使用Unicode编码的字符通过转义字符来表示。区间范围:U000 ~ UFFF( 16进制 ).
- 以2进制储存,写16进制是为了方便看.
- ( a = 97, A = 65 ) 最大可表示2^16 = 65536 ( 现在更多了 )
②. 转义字符:
字符 | 含义 |
---|---|
\n | 换行 |
\t | 制表符,相当于Tab. |
… | … |
(2)引用类型(reference type)
5). 默认值
除了基本类型,其余默认值都是null。
布尔值,默认是false。
3. 类型转换
Java是强类型语言,所以要进行某些运算时,需要用到类型转换。
运算中,不同数据类型的数据计算前须转化为同一数据类型。
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换到低容量的时候,强制转换
- 转换的时候可能存在内存溢出或精度问题
(1). 强制类型转换
高到低,需要强制转换。
(2). 自动类型转换
低到高,系统自动转换。
1). 转换优先级
低 ---------------------------------------------------------------> 高
byte, short, char -> int -> long -> float -> double
4. 变量、常量
(1). 变量
变量:可以变化的量。
java是一种强类型语言,每个变量都必须声明其类型
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
声明变量格式:
type varName [=value] [{,varName[=value]}]; //数据类型 变量名 = 值;可以使用逗号来声明多个同类型变量。 //不建议一行声明多个变量
注意事项:
- 每个变量都有类型,类型可以是基本类型或引用类型
- 变量名须为合法标识符
- 变量声明是一条完整的语句,因此每个声明必须以( ; )分号结束
1). 作用域
①. 类变量
写在类里的,须加关键字static.
即:静态变量、全局变量
②. 实例变量
在类里,方法外。没有关键字static.
声明的同时,可以不进行初始化。
从属于对象;如果不自行初始化,默认值为 0 0.0
③. 局部变量
写在方法里的.
public class Demo01{
//实例变量,从属于对象。
//声明过程
String name;
int age;
//main方法
public static void main(String[] args){
//局部变量:必须声明且初始化值
int i = 10;
System.out.println(i);
}
//其它方法
public void add(){
}
}
2). 变量的命名规范
① 所有变量、方法、类名:
见名知意
② 类成员变量:
首字母小写和驼峰原则:eg.monthSalary(除第一个单词以外,后面的单词首字母大写)
③ 局部变量:
首字母小写,驼峰原则
④ 常量:
大写字母和下划线:MAX_VALUE
⑤ 类名:
首字母大写和驼峰原则:Man, GoodMan
⑥ 方法名:
首字母小写,驼峰原则:run(), runRun()
(2). 常量
初始化后不能再改变的值,不会变动的值。
final 常量名 = 值;
final double PI = 3.14;
常量名一般使用大写字符
public class Demo09{
//final是修饰符,无先后顺序
//final: 代表常量
static final double PI = 3.14;
public static void main(String[] args){
System.out.println(PI);
}
}
5. 运算符
(1). Java语言支持如下运算符:
1). 算数运算符:+, -, *, /, %(模运算,取余), ++, –
2). 赋值运算符:=
3). 关系运算符:>, <, >=, <=, ==, !=, instanceof
4). 逻辑运算符:&&(与), ||(或), !(非)
System.out.println("a&&b = " + (a&&b));//一假即假System.out.println("a||b = " + (a||b));//一真即真System.out.println("!(a&&b) = " + !(a&&b));
5). 位运算符:&, |, ^(异或), ~(取反), >>(右移), <<(左移), >>>
A = 0011 1100
B = 0000 1101A&B = 0000 1100 一0即0
A|B = 0011 1101 一1即1
A^B = 0011 0001 相同为0,不同为1
~B = 1111 0010 取反
<<(左移):相当于*2 >>(右移):相当于/2
位运算,效率极高,速度快
6). 条件运算符:?
7). 扩展赋值运算符:+=, -=, *=, /=
(2). 优先级
6. 包机制、JavaDoc(文档注释)
(1). 包机制
1). 功能:
为了更好的组织类,Java提供了包机制,用于区分类名的命名空间
“包”的本质就是“文件夹”
2). 语法格式:
package pkg1[.pkg2[.pkg3...]];
一般利用公司域名倒置为包名
eg:com.zhong.xxx
3). 使用包:
为了能使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import语句”可完成此功能
import package1[.package2...].(classname|*);
(2). JavaDoc
一种技术,可以将注释信息生成帮助文档。类似于java的API
1). 参数信息
@author 作者名
@version 版本号
@since 指明需要最早使用的jdk版本
@param 参数名
@return 返回值情况
@throws 异常抛出情况
package com.zhong.base;//该注释,加在类上/** * @author Zhong * @version 1.0 * @since 1.8 */public class Doc { String name; //给方法加属性 /** * * @param name * @return * @throws Exception */ public String test(String name)throws Exception{ return name; }}
2). 生成JavaDoc文档
①. 使用命令行
格式:
javadoc 参数 java文件
eg:
在目录栏最前面,输入CMD空格,回车打开cmd窗口
在cmd中输入:javadoc -encoding UTF-8 -charset UTF-8 Doc.java
以上输入详解:java生成文档 -编码为 UTF-8 -字符集 UTF-8 类名
在源目录下生成了很多HTML文件,点击index.html可查看文档
②. 使用IDEA
步骤一:在IDEA里点击如下图所示位置
步骤二:
详解:
- 选择是整个项目还是模块还是单个文件
- 文档输出路径
- Locale选择地区,这个决定了文档的语言,中文就是zh_CN
- 传入JavaDoc的参数,一般这样写 -encoding UTF-8 -charset UTF-8 -windowtitle “文档HTML页面标签的标题” -link http://docs.Oracle.com/javase/7/docs/api
Java流程控制:
Scanner对象:
可通过Scanner类来获取用户的输入,用于实现人机交互
1. 基本语法:
Scanner s = new Scanner(System.in);
2. Scanner类的方法:
(1). next()与nextLine()方法:
获取输入字符串
区别:
①. next():
next()不能得到带有空格的字符串,以空格或回车作为结束
用的较少
②. nextLine():
Ⅰ. 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
Ⅱ. 可以获得空白
用的较多
(2).hasNext()与hasNextLine():
在next()与nextLine()方法读取前,判断是否有输入数据
在代码中的使用:
package com.zhong.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args){
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//创建了一个对象,通过System.in接收用户的输入。并把它封装成scanner对象,用于用户的扫描测试
System.out.println("使用next方式进行接收");
//判断用户有没有接收字符串
if(scanner.hasNext() == true){
//使用next方式进行接收
String str = scanner.next();
System.out.println("输出内容为:"+str);
}
//凡是属于IO流(即,输入输出)的类,如果不关闭会一直占用资源,用完要关掉
scanner.close();
}
}
package com.zhong.scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args){
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine来接收");
if(scanner.hasNextLine()){
String str = scanner.nextLine();//判断是否还有数据
System.out.println("输出结果为:"+str);
}
scanner.close();
}
}
一、顺序结构
Java的基本结构是顺序结构,除非特别指明,否则按照顺序一句一句执行。最简单的算法结构
是任何一种算法都离不开的一种基本算法结构
二、 选择结构
1. if单选择结构
语法格式:
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
2. if双选择结构
语法格式:
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
3. if多选择结构
语法格式:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 3的值为true执行代码
}else{
//如果以上布尔表达式都不为true执行代码
}
4. 嵌套的if结构
语法格式:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}
}
5. Switch多选择结构
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
case标签必为字符串常量或字面量
支持变量类型:
byte、short、int或char.从Java SE 7开始,支持字符串String类型
语法格式:
switch(expression){
case value :
//语句
break;//可选
case value :
//语句
break;//可选
//你可以有任意数量的case语句
default : //可选
//语句
}
switch穿透现象:
若没有break,则会输出符合要求的case及以下所有语句
反编译:
把.class文件(字节码文件,看不懂的)反编译成.java文件(看得懂的)
过程(使用IDEA):
点击IDEA
最后在IDEA中,双击即可查看。
三、循环结构
1. while循环
语法格式:
while(布尔表达式){
//循环内容
}
2. do…while循环
语法格式:
do{
//代码语句
}while(布尔表达式);
while与do while的区别:
while先判断后执行。
do-while先执行后判断。
do-while的循环体至少被执行一次
3. for循环
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环的执行次数,在执行前就已经确定
在Java5中引用了一种主要用于数组的增强型for循环
语法格式:
for(初始化;布尔表达式;更新){
//代码语句
}
快捷输入:
在IDEA中,输入"100.for"自动生成for循环语句
for (int i = 0; i < 100; i++) {
}
一些特点:
(1). 最先执行初始化步骤,可以声明一个或多个循环控制变量。也可为空语句
2种输出语句:
System.out.println();//输出会换行
System.out.print();//输出不会换行
4. 增强for循环
Java5引入了一种主要用于数组或集合的增强型for循环。(数组重点使用)
语法格式:
for(声明语句 : 表达式){
//代码句子
}
四、break和continue
1. break:
break在任何循环语句的主体部分,均可用break控制循环流程。
用于强行退出循环,不执行循环中剩余的语句(也在switch中使用)。
2. continue:
continue语句用于循环体中,用于终止某次循环,即跳过循环体中尚未执行的语句,接着进行是否执行下一次循环的判断