Java-02基础
-
多写(代码),多写(笔记),多写(文章)
-
多练(交流),多练(思维),多练(技能)
-
多分享(知识),多分享(怎么了),多分享(为什么)
-
最重要(坚持)
-
每个牛B人物背后都有一段苦B的岁月,只要像傻B一样坚持,终将牛B!
1. 注释、标识符与关键字
1.1 注释
注释并不会被执行,是给我们写代码的人看的。书写注释是一个非常好的习惯,请不要在正式项目中书写“有趣的代码注释”
/***
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ____/`---'\____
* . ' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
*
* .............................................
* 佛祖保佑 永无BUG
*/
/***
* ii. ;9ABH,
* SA391, .r9GG35&G
* &#ii13Gh; i3X31i;:,rB1
* iMs,:,i5895, .5G91:,:;:s1:8A
* 33::::,,;5G5, ,58Si,,:::,sHX;iH1
* Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG
* .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8
* :SB9s:,............................,,,.,,,SASh53h,1G.
* .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX,
* ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi
* i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1
* 59;.....,. .,,,,,,,,,,,... .............,..:1;.:&s
* s8,..;53S5S3s. .,,,,,,,.,.. i15S5h1:.........,,,..,,:99
* 93.:39s:rSGB@A; ..,,,,..... .SG3hhh9G&BGi..,,,,,,,,,,,,.,83
* G5.G8 9#@@@@@X. .,,,,,,..... iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh
* Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX:
* ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M; ....,,,,,,,,S8
* X3 iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs ...,,,,,,,:Gs
* r8, ,,,...,,,,,,,,,,..... ,h8XABMMHX3r. .,,,,,,,.rX:
* :9, . .:,..,:;;;::,.,,,,,.. .,,. ..,,,,,,.59
* .Si ,:.i8HBMMMMMB&5,.... . .,,,,,.sMr
* SS :: h@@@@@@@@@@#; . ... . ..,,,,iM5
* 91 . ;:.,1&@@@@@@MXs. . .,,:,:&S
* hS .... .:;,,,i3MMS1;..,..... . . ... ..,:,.99
* ,8; ..... .,:,..,8Ms:;,,,... .,::.83
* s&: .... .sS553B@@HX3s;,. .,;13h. .:::&1
* SXr . ...;s3G99XA&X88Shss11155hi. ,;:h&,
* iH8: . .. ,;iiii;,::,,,,,. .;irHA
* ,8X5; . ....... ,;iihS8Gi
* 1831, .,;irrrrrs&@
* ;5A8r. .:;iiiiirrss1H
* :X@H3s....... .,:;iii;iiiiirsrh
* r#h:;,...,,.. .,,:;;;;;:::,... .:;;;;;;iiiirrss1
* ,M8 ..,....,.....,,::::::,,... . .,;;;iiiiiirss11h
* 8B;.,,,,,,,.,..... . .. .:;;;;iirrsss111h
* i@5,:::,,,,,,,,.... . . .:::;;;;;irrrss111111
* 9Bi,:,,,,...... ..r91;;;;;iirrsss1ss1111
*/
1.1.1 单行注释
语法:使用双正斜杠+星+空格+注释内容
// 这一个单行注释
1.1.2 多行注释
语法:使用正斜杠+星+空格+注释内容+空格+星+正斜杠
/*
这一个多行注释
这一个多行注释
这一个多行注释
*/
1.1.3 文档注释
语法:使用正斜杠+星星+空格+注释内容+空格+星+正斜杠
/**
* @Description 这是文档注释
* @Author 李向丞
*/
1.2 标识符
Java 所有的组成部门都需要名字。类名、变量名以及方法名都被称为标识符。
/*
* HelloWorld代表的是类名
* mian代表的是方法名
* str代表的是变量名
*/
public class HelloWorld {
public static void main(String[] args) {
String str = "Hello World!";
System.out.println(str);
}
}
标识符注意点
- 所有的标识符都应该以字母(A-Z或者a-z)、美元符($)、下划线(_)开始
- 首字符字后可以是字母(A-Z或者a-z)、美元符($)、下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或者方法名(非常重要)
- 标识符是大小写敏感(区分)的
- 可以使用中文命名,但是一般不建议这样使用,也不建议使用拼音,很Low
- 合法标识符举例:age、$student、_value、__1_value
- 非法标识符举例:123abc、-student、#abc
1.3 关键字
Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息。
| 关键字 | 含义 |
|---|---|
| abstract | 表明类或者成员方法具有抽象属性 |
| assert | 断言,用来进行程序调试 |
| boolean | 基本数据类型之一,声明布尔类型的关键字 |
| break | 提前跳出一个块 |
| byte | 基本数据类型之一,字节类型 |
| case | 用在switch语句之中,表示其中的一个分支 |
| catch | 用在异常处理中,用来捕捉异常 |
| char | 基本数据类型之一,字符类型 |
| class | 声明一个类 |
| const | 保留关键字,没有具体含义 |
| continue | 回到一个块的开始处 |
| default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
| do | 用在do-while循环结构中 |
| double | 基本数据类型之一,双精度浮点数类型 |
| else | 用在条件语句中,表明当条件不成立时的分支 |
| enum | 枚举 |
| extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
| final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
| finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
| float | 基本数据类型之一,单精度浮点数类型 |
| for | 一种循环结构的引导词 |
| goto | 保留关键字,没有具体含义 |
| if | 条件语句的引导词 |
| implements | 表明一个类实现了给定的接口 |
| import | 表明要访问指定的类或包 |
| instanceof | 用来测试一个对象是否是指定类型的实例对象 |
| int | 基本数据类型之一,整数类型 |
| interface | 接口 |
| long | 基本数据类型之一,长整数类型 |
| native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
| new | 用来创建新实例对象 |
| package | 包 |
| private | 一种访问控制方式:私用模式 |
| protected | 一种访问控制方式:保护模式 |
| public | 一种访问控制方式:共用模式 |
| return | 从成员方法中返回数据 |
| short | 基本数据类型之一,短整数类型 |
| static | 表明具有静态属性 |
| strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范 |
| super | 表明当前对象的父类型的引用或者父类型的构造方法 |
| switch | 分支语句结构的引导词 |
| synchronized | 表明一段代码需要同步执行 |
| this | 指向当前实例对象的引用 |
| throw | 抛出一个异常 |
| throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
| transient | 声明不用序列化的成员域 |
| try | 尝试一个可能抛出异常的程序块 |
| void | 声明当前成员方法没有返回值 |
| volatile | 表明两个或者多个变量必须同步地发生变化 |
| while | 用在循环结构中 |
2. 数据类型
2.1 强类型语言
强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java、.net 、Python、C++等语言
2.2 弱类型语言
弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb 、PHP、javascript等语言
2.3 Java的数据类型分为两大类
2.3.1 基本类型(primitive type)
| 数据类型名称 | 占用字节 | 范围 | 默认值 | 封装器类 |
|---|---|---|---|---|
| byte(字节型) | 1 | -128~127(-2的7次方到2的7次方-1) | 0 | Byte |
| short(短整型) | 2 | -32768~32767(-2的15次方到2的15次方-1) | 0 | Short |
| int(整数型) | 4 | -2147483648~2147483647(-2的31次方到2的31次方-1) | 0 | Integer |
| long(长整型) | 8 | -9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1) | 0.0L | Long |
| float(浮点型) | 4 | 3.402823e+38~1.401298e-45(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方) | 0.0F | Float |
| double(双精度浮点型) | 8 | 1.797693e+308~4.9000000e-324(e+308 表示乘以10的308次方,而e-324 表示乘以10的负324次方) | 0 | Double |
| char(字符型) | 2 | 可以是汉字,因为是Unicode编码;可以是十进制数、八进制数、十六进制数等等;可以用字符编码;gbk / gb2312 是两个字节,utf-8 是3个字节 | \u0000(空格) | Character |
| boolean(布尔类型) | 1 | true、false | false | Boolean |
// 整数拓展 在Java中二进制使用0b开头;八进制使用0开头;十六进制使用0x开头;
int i1 = 10;
int i2 = 010;
int i3 = 0x10;
System.out.println(i1); // 10
System.out.println(i2); // 8
System.out.println(i3); // 16
/*
* 浮点数拓展 银行业务如何表示?例如:钱
* 结论:浮点数存在有限的精度和舍入误差,浮点数的值是大约、接近但不等于;
* 如需使用小数比对,使用BigDecimal数学工具类,具体可参考[BigDecimal用法详解](https://www.cnblogs.com/AutherLee/p/14812989.html)
*/
float f1 = 0.1F;
double d1 = 1.0/10; // 0.1
float f2 = 23131312312312313F;
float f3 = f2 + 1;
System.out.println(f1); // 0.1
System.out.println(d1); // 0.1
System.out.println(f1==d1); // false
System.out.println(f2==f3); // true
/*
* 字符拓展 所有的字符都是数字
* 使用 Unicode 编码表解析,例如:97=a;65=A……
*/
char c1 = 'a';
char c2 = 'A';
char c3 = '\u0061';
System.out.println((int) c1); // 97
System.out.println((int) c2); // 65
System.out.println(c3); // a
/* 布尔值拓展
* 下面两句IF语句所代表的意义是一样的
* Less Is More!
*/
boolean flag = true;
if (flag == true) {}
if (flag) {}
| 转义符 | 说明 | ASCII码值(十进制) |
|---|---|---|
| \a | 响铃(BEL) | 007 |
| \b | 退格(BS),将当前位置移到前一列 | 008 |
| \f | 换页(FF),将当前位置移到下页开头 | 012 |
| \n | 换行(LF),将当前位置移到下行开头 | 010 |
| \r | 回车(CR),将当前位置移到本行开头 | 013 |
| \t | 水平制表(HT),跳到下一个TAB位置 | 009 |
| \v | 垂直制表(VT) | 011 |
| \\ | 代表一个反斜线字符 | 092 |
| \' | 代表一个单引号字符 | 039 |
| \" | 代表一个双引号字符 | 034 |
| \0 | 代表一个空字符(NULL) | 000 |
| \ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
| \xhh | 1到2位十六进制数所代表的任意字符 | 二位十六进制 |
2.3.2 引用类型(reference type)
- 类 Class
- 接口 Interface
- 数组 Array
2.3.3 什么是字节
-
位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数
-
字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母“B”来表示
-
1B(byte,字节)=8bit(位)
-
字符:是指计算机中使用的字母、数字、字和符号
-
1bit表示1位
-
1 Byte(B) = 8 bit
-
1 Kilo Byte(KB) = 1024B
-
1 Mega Byte(MB) = 1024 KB
-
1 Giga Byte (GB)= 1024 MB
-
1 Tera Byte(TB)= 1024 GB
-
1 Peta Byte(PB) = 1024 TB
-
1 Exa Byte(EB) = 1024 PB
-
1 Zetta Byte(ZB) = 1024 EB
-
1 Yotta Byte(YB)= 1024 ZB
-
1 Bronto Byte(BB) = 1024 YB
-
1Nona Byte(NB)=1024 BB
-
1 Dogga Byte(DB)=1024 NB
-
1 Corydon Byte(CB)=1024DB
3. 类型转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。运算中,不同类型的数据线转化为同一类型,然后进行运算。
由低到高排列:
byte, short, char --> int --> long --> float --> double
3.1 强制类型转换
(类型)变量名,高 --> 低
int i = 128;
byte b = (byte)i;
3.2 自动类型转换
低 --> 高
int i = 128;
double b = i;
3.3 类型转换注意点
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换到低容量的时候,需要使用强制转换
- 转换的时候可能会存在内存溢出、精度问题
@Test
public void testDemo06() {
/*
* 操作容量比较大数的时候,注意溢出问题
* JDK7新特性,数字之间可以使用"_"进行分割
* */
int money = 1_000_000_000;
int amount = 20;
int totalA = money * amount;
System.out.println(totalA); // -1474836480
long totalB = money * amount;
System.out.println(totalB); // -1474836480,默认为int*int,结果集再转换为long类型,同样为值溢出
long totalC = (long)money * amount;
System.out.println(totalC); // 20000000000 正确写法
}
4. 变量、常量
4.1 变量
变量是什么:就是可以变化的量!
Java是一种强类型语言,每个变量都必须声明其类型
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
4.1.1 语法定义
// 数据类型 变量名 = 值;可以使用","隔开来声明多个同类型变量
type varName [=value][{,varName[=value]}];
int i;
int j = 0;
int a, b, c; // 不推荐写法
int x = 10, y = 20, z = 30; // 不推荐写法
4.1.2 注意事项
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以";"结束
4.1.3 变量的作用域
- 类级变量:又称全局级变量或静态变量,需要使用static关键字修饰。类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化
- 对象实例级变量:就是成员变量,实例化后才会分配内存空间,才能访问。成员变量是定义在方法之外,类之内的。成员变量随着对象的创建而存在,随着对象的消失而消失
- 方法级变量:就是在方法内部定义的变量,就是局部变量。局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量的作用域从它被声明的点开始,一旦出了自己的作用域马上从内存中消失
- 块级变量:就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if、for 语句的块。块是指由大括号包围的代码
public class Variable {
{
int a = 0; // 块级变量
}
static int b = 0; // 类级变量
String str = "Hello World"; // 对象实例级变量
public void method() {
int c = 0; // 方法级变量
System.out.println(c);
System.out.println(new Variable().str);
System.out.println(b);
}
}
4.2 常量
常量(Constant):初始化(initialize)后不能再改变值!不会发生变动的值
所谓常量可以理解成一种特殊的变量,当常量被赋值后,在程序运行过程中不允许被改变
常量名一般使用大写字符
4.2.1 语法定义
// final 数据类型 变量名 = 值;可以使用","隔开来声明多个同类型变量
final type varName = value[{,varName[=value]}];
final double PI = 3.1415926;
4.3 变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:小驼峰原则(例:monthSalary)
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线(例:MAX_VALUE)
- 类名:大驼峰原则(例:Student、Shop)
- 方法名:小驼峰原则(例:run()、getShop())
5. 运算符
Java 语言支持如下运算符:
- **算术运算符:+,-,*,/,%,++,-- **
- **赋值运算符:= **
- **关系运算符:>,<,>=,<=,==,!=,instanceof **
- **逻辑运算符:&&,||,! **
- 位运算符:&,|,^,~,>>,<<,>>>(了解!!!)
- 条件运算符:?,:
- 扩展赋值运算符:+=,-=,*=,/=
5.1 算术运算符
int a = 10;
int b = 20;
// 算术运算符 +,-,*,/,%,++,--
System.out.println("a + b = " + (a + b)); // a + b = 30
System.out.println("a - b = " + (a - b)); // a - b = -10
System.out.println("a * b = " + (a * b)); // a * b = 200
System.out.println("a / b = " + (a / b)); // a / b = 0 值溢出
System.out.println("a % b = " + (a % b)); // a % b = 10 (10 / 20 = 0……10)
System.out.println("变量 a 的值:" + a); // 变量 a 的值:10
System.out.println("变量a++后:" + a++); // 变量a++后:10
System.out.println("变量 a 的值:" + a); // 变量 a 的值:11
System.out.println("变量--a后:" + --a); // 变量--a后:10
System.out.println("变量 a 的值:" + a); // 变量 a 的值:10
System.out.println("幂运算:2 ^ 3 = " + Math.pow(2, 3)); // 幂运算:2 ^ 3 = 8.0
5.2 关系运算符
int a = 10;
int b = 20;
// 关系运算符 >,<,>=,<=,==,!=
System.out.println("a > b :" + (a > b)); // a > b :false
System.out.println("a < b :" + (a < b)); // a < b :true
System.out.println("a >= b :" + (a >= b)); // a >= b :false
System.out.println("a <= b :" + (a <= b)); // a <= b :true
System.out.println("a == b :" + (a == b)); // a == b :false
System.out.println("a != b :" + (a != b)); // a != b :true
5.3 逻辑运算符
int c = 30;
boolean flagA = true;
boolean flagB = false;
boolean flagC;
/* 逻辑运算符:,||,!
* flagA && flagB:如果两个变量都为真,结果为真
* flagA || flagB:如果两个变量有一个真,结果为真
* !(flagA && flagB):如果是真,则返回假(取反)
*/
System.out.println("flagA && flagB:" + (flagA && flagB)); // flagA && flagB:false
System.out.println("flagA || flagB:" + (flagA || flagB)); // flagA || flagB:true
System.out.println("!(flagA && flagB):" + !(flagA && flagB)); // !(flagA && flagB):true
// 短路运算
flagC = (c < 10) && (c++ < 4);
System.out.println("变量c的值为30,所以第一个布尔值返回假。&&后面的代码则不会执行!" + flagC);
System.out.println("变量C的值为:" + c + ",证明c++没有执行!这就叫短路运算");
5.4 位运算符
/* 位运算符:&,|,^,~,>>,<<,>>>
* x = 0011 1100(二进制)
* y = 0000 1101(二进制)
* x & y = 0000 1101(上下位进行比较,如果两位都是0则返回0,如果两位都是1则返回1,否则返回0)
* x | y = 0011 1101(上下位进行比较,如果两位有一位为0则返回0,如果两位有一位为1则返回1,否则返回0)
* x ^ y = 0011 0001(上下位进行比较,如果两位相同则返回0,两位不相同则返回1)
* ~ X = 1100 0011(把位取反值)
*
* Tip:2乘以8怎么运算最快?
* 0000 0000 0
* 0000 0001 1
* 0000 0010 2
* 0000 0011 3
* 0000 0100 4
* ……
* 0000 1000 8
* 0001 0000 16
*
* << *2
* >> /2
* 答案:2 << 3
*/
5.5 扩展赋值运算符
int a = 10;
int b = 20;
/*
* 扩展赋值运算符:+=,-=,*=,/=
* a += b(a = a + b)
* a -= b(a = a - b)
* a *= b(a = a * b)
* a /= b(a = a / b)
* */
System.out.println("a += b :" + (a += b)); // a += b :30
System.out.println("a -= b :" + (a -= b)); // a -= b :10
System.out.println("a *= b :" + (a *= b)); // a *= b :200
System.out.println("a /= b :" + (a /= b)); // a /= b :10
5.6 条件运算符
/*
* 条件运算符:?,:
* x ? y : z(如果x==true,则结果为y,否则结果为z)
* */
System.out.println("判断变量a的值是否大于60:" + (a > 60 ? "真的" : "假的")); // 判断变量a的值是否大于60:假的
6. 包机制、JavaDoc
6.1 包机制
为了更好的组织类,Java提供了包机制,用于区别类名的命名空间;包的本质就是文件夹
语法
package pkg1[. pkg2[. pkg3……]];
package com.baidu.www;
package com.baidu.wenku;
package com.baidu.music;
- 一般利用公司域名倒置作为包名
- 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用"import"语句完成此功能
import package1[.package2……].(className|*);
import java.util.Date;
import java.io.*;
6.2 JavaDoc
JavaDoc命令是用来生成自己API文档
参数信息
- @author:作者名
- @version:版本号
- @since:指明需要最早使用的jdk版本
- @param:参数名
- @return:返回值情况
- throws:异常抛出情况
6.2.1 CMD方法
javadoc -encoding (字符集编码,中文推荐UTF-8) -charset (字符集编码,中文推荐UTF-8) -d (生成文档的文件夹路径) java文件路径包含java文件的后缀.java
javadoc -encoding UTF-8 -charset UTF-8 -d D:\Javadoc D:\Test\com\lee\TestDemo01.java
6.2.2 IDEA方法


本文来自博客园,作者:爱Ni说不出口,转载请注明原文链接:https://www.cnblogs.com/ArtherLee/p/14817241.html

浙公网安备 33010602011771号