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方法

IDEA生成JavaDoc第一步

IDEA生成JavaDoc第二步

posted @ 2021-05-27 11:39  爱Ni说不出口  阅读(188)  评论(0)    收藏  举报