笔记整理来源 B站UP主狂神说 https://www.bilibili.com/video/BV12J41137hu?p=20
JAVA基础语法
注释、标识符、关键字
-
注释有三种:
-
单行注释; //
-
多行注释: /* */
-
文档注释: /** */ 里面的内容可以包含部分部分自动识别
-
-
标识符
-
关键字:
-
java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
-
所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始。
-
首字符之后可以是字母(A-Z或者a-z),美元符($)、或者下划线(_)或数字的任何字符组合。
-
不能使用关键字作为变量名或方法名。
-
标识符是大小写敏感的,大小写是不一样的。
-
可以使用中文命名,但一般不建议。
-
数据类型
-
强类型语言
- 要求变量的使用要严格规定,所有变量都必须先定义后才能上使用。
- 例如:c语言,c++等
-
弱类型语言
- 例如VBScript、JavaScript
-
Java的数据类型分为两大类
-
基本类型(primitive type)
-
数值类型
-
整数类型
- byte占1个字节范围:-128 - 127
- short占2个字节范围:-32768 - 32767
- int占4个字节范围:-21_4748_3648 - 21_4748_3647(正负21亿)
- long占8个字节范围:-922_3372_0368_5477_5808 - 922_3372_0368_5477_5807
-
浮点类型
- float占4个字节
- double占8个字节
-
字符类型char:占2个字节
-
-
boolean类型:占1位其值只有true和false两个
-
字节解释:
- 位(bit):是计算机内部数据存储的最小单位,11001100是一个8位2进制数。
- 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。
- 1B(byte,字节)= 8bit(位)
- 字符:是指计算机中使用的字母、数字、字和符号
- 1bit表示1位
- 1Byte表示一个字节 1B=8b
- 1024B = 1KB
- 1024KB = 1M
- 1024M = 1G
-
科普:32位的电脑最大支持4G内存;64位电脑最大支持128G内存。
-
-
引用类型(reference type)
- 类
- 接口
- 数组
-
数据类型扩展及面试题讲解
-
注意事项:
-
float和double这样的浮点型数据能表现的字长是有限的,离散的,会存在舍入误差,结果是一个大约数,接近单不等于,最好的方式是完全避免使用浮点数进行比较。对于银行业务等的开发,可以使用BigDecimal这样的数学工具。
-
// 布尔值扩展 boolean flag = true; if (flag==true){ // if(flag)与if(flag==true)在这里是等价的,前者更好 }
-
// 整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x int i = 10; int i2 = 010; // 八进制0,每8进1 int i3 = 0x11; // 十六进制0x,每16进1 System.out.println(i); // 10 System.out.println(i2); // 8 System.out.println(i3); // 17
-
// 字符拓展 //=========================================================== char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int)c1); // 强制转换数据类型 System.out.println(c2); System.out.println((int)c2); // 强制转换数据类型 // 所有的字符本质还是数字 // 编码 Unicode 表:97 = a ; 2字节 最多可以表示 0 - 65536个字符 // 早期Excel 最长2^16 = 65536 // Unicode表的编码:U0000 UFFFF 表示的范围 char c3 = '\u0061'; System.out.println(c3);
-
// 转义字符 //=========================================================== // \t 制表符 // \n 换行 // ... System.out.println("Hello\tWorld"); System.out.println("Hello\nWorld");
-
类型转换
-
由于是强类型语言,所以在有些运算的时候,需要用到类型转换。
-
字节大小排序,由低到高,但是long大于float,因为小数的优先级一定大于整数。
-
运算中,不同类型的数据先转化为同一类型,然后进行计算。
-
强制类型转换
- 例如:int i = 12;
byte j = (byte)i;//此时j = 12
-
自动类型转换
- 由低到高是不需要转换的
- 例如int i = 12,;
double j = i;//此时j等于12.0
-
注意点:
-
不能转换成不相关的数据类型
-
不能对布尔值进行转换 // boolean类型:占1位其值只有true和false两个
-
在把高容量转换到低容量的时候,强制转换
-
转换的时候可能存在内存溢出,或者精度问题//例如小数点后的数据自动抹除。
-
数字之间可以使用下划线进行分割。
-
public class Demo05 { public static void main(String[] args) { int i = 128; byte b = (byte)i; System.out.println(i); System.out.println(b); // 由于byte的范围是-128 - 127,因此此时发生内存溢出,因此虽然强制转换了,但是数值是什么是不确定的。 double j = i; System.out.println(j); System.out.println("======================="); char k = 'a'; int l = k + 1; System.out.println(l); System.out.println((char)l); int money = 20_0000_0000; //数字之间可以使用下划线进行分割,int的范围是-21亿-+21亿(-21_4748_3648 - 21_4748_3647) System.out.println(money); int year = 20; long total = (long)money * year; //此处应该是任意一个类型转换为浮点数,相乘(加)后依然是浮点数。 System.out.println(total); } }
-
变量、常量
-
变量
-
类变量
-
实例变量
-
局部变量
public class Variable{ static int allClicks = 0; //类变量 String str = "hello world"; //实例变量 public void method{ int i = 0; //局部变量 } }
-
-
常量:初始化之后就不能再改变值!不会变动的值。
- 常量名一般使用大写字符
- 它的值被设定后,在程序运行过程中不允许被改变。
final 常量名=值; final double PI=3.14;
-
命名规范
- 所有变量、方法、类型:见名知意,尽量用相关英文单词
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man, GoodMan
- 方法名:首字母小写和驼峰原则:run(), runRun()
运算符
优先级:首先是一元运算符(加减乘除等),然后是与或非,避免出错可多使用()进行优先级区分。
-
算数运算符:+ - * / % ++ – //java里取余运算被称为模运算
-
赋值运算符:=
-
关系运算符:> < >= <= == != instanceof //最后的单词是面向对象里用的
-
逻辑运算符:&& || ! // 与 或 非
-
位运算符:& | ~ >> << >>> //后边的四个了解即可,前面的四个需要掌握;位运算是与计算机操作有关的,下面两个是用来简化(偷懒)的。
-
条件运算符:? :
-
扩展赋值运算符:+= -= *= /=
-
package operator;//算术运算符 public class Demo01 { public static void main(String[] args) { //二元运算符 //Ctrl+D; 复制当前行到下一行 int a = 10; int b = 20; int c = 25; int d = 25; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/(double)b);//结果可能为小数的时候需要注意数据范围 } }
-
package operator;//算数运算符 public class Demo02 { public static void main(String[] args) { long a = 123312312312L; int b = 123; short c = 10; byte d = 8; //运算过程中 有long则结果为long // 无long则结果为Int // 有double则结果为double System.out.println(a+b+c+d);//Long System.out.println(b+c+d); //Int System.out.println(c+d); //Int } }
-
package operator;//关系运算符 public class Demo03 { public static void main(String[] args) { //关系运算符返回的结果: 正确,错误 布尔值 int a = 10; int b = 20; int c = 21; //取余,也叫模运算 System.out.println(c%a); System.out.println(a>b); System.out.println(a<b); System.out.println(a==b); System.out.println(a!=b); } }
-
package operator;//算数运算符 import java.sql.SQLOutput; import java.util.SortedMap; public class Demo04 { public static void main(String[] args) { //++自增 --自减 一元运算符 int a = 3; int b = a++;//先赋值再自增,相当于在这句下边有a=a+1; System.out.println(a); int c = ++a;//先自增再赋值,相当于在这局上面有a=a+1 System.out.println(a); System.out.println(b); System.out.println(c); int d = 4; int e = 5; System.out.println(d++ + ++e);//10,此处相当于上一行有e=e+1;下一行有d=d+1; //幂运算 没有^运算符,因此需要借助一些工具来实现 // 很多操作可以使用一些工具类才操作。 System.out.println((int)Math.pow(2,3)); } }
-
位运算
-
package operator; //位运算 public class Demo06_WeiYunSuan { public static void main(String[] args) { /* A = 0011 1100 B = 0000 1101 A&B = 0000 1100 //与,都为1为1,否则为0 A|B = 0011 1101 //或,有1为1,其余为0 A^B = 0011 0001 //异或,相同则为0,否则为1 ~B = 1111 0010 //取反 //面试题 2*8怎么运算最快 效率极高!!!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); } }
-
条件运算符:?:
-
package operator; public class Demo08_SanYuanYunSuanFu { public static void main(String[] args) { // x ? y : z //如果x==true,则结果为y,否则为z int score = 80; String type = score < 60 ? "不及格" : "及格";//必须掌握 //相当于if System.out.println(type); } }
包机制
为了更好的组织类,包机制用于区别类名的命名空间。
本质就是文件夹。
包语句的语法格式为:
package pk1[.pk2[.pk3]];
一般利用公司域名倒置作为包名: com.baidu.www
导入包
import package1[.package2...].(className|*);
*号会导入这个包下所有的类;
推荐看《阿里巴巴java开发手册2018》学习语法规范。
JavaDoc
是用来生成自己API的文档
参数信息(前两个会就ok)
- @author 作者号
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
jdk8帮助文档,在线版,需要反复学习。
通过命令行生成文档(在浏览器内阅读):
- 右键doc,在explore中打开
- cmd
- javadoc -encoding UTF-8 -charset UTF-8 Doc.java //javadoc 后面的一长串到Doc.java之前的都是用来避免中文出现乱码的情况的;
- 生成的网页,可以打开index文件
作业:学会使用IDEA生成JavaDoc文档:
基础部分的一切知识,后面几乎每天都会用。