注释
// 单行注释
/*多行注释
多行注释多行注释
多行注释
多行注释
*/
/**
* 文档注释
* @Description 描述
* @Author 作者
*/
// 补充:有趣的代码注释,百度搜索即可
/**
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ____/`---'\____
* . ' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
*
* .............................................
* 佛祖保佑 day day up!
*/
标识符
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关键字
注意点
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($),或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、_1_value
- 非法标识符举例:123abc、-salary
- 补充:可以使用中文或拼音命名,但是不建议,很Low
数据类型
强类型语言(java、c等)
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
弱类型语言(javascript等)
Java的数据类型分为两大类
基本类型(primitive type)
数值类型
1.整数类型
- byte 占1字节,范围-128~127
- short 占2字节,范围-32768~32767
- int 占4个字节,范围-2147483648~2147483647
- long 占8个字节,范围-9223372036854775808~9223372036854775807
2.浮点类型
- float 占4个字节
- double 占8个字节
3.字符类型
- char 占2个字节
boolean类型:占1位其值只有true和false
演示
public class PrimitiveType {
public static void main(String[] args) {
// 八大基本类型
// 整数
int num1 = 3;
byte num2 = 127; // 范围-128~127
short num3 = 123;
long num4 = 23L; // long类型要在数字后添加L
// 小数:浮点数
float num5 = 50.2F; // float类型要在数字后添加F
double num6 = 3.14123123123;
// 字符
char name1 = '中'; char name2 = 'a'; // char表示的是字符,定义的时候用单引号,只能存储一个字符
//String name2 = "abc";
/*
1 char是表示的是字符,定义的时候用单引号,只能存储一个字符。例如; char='d'.
而String表示的是字符串,定义的时候用双引号,可以存储一个或者多个字符。例如:String=“we are neuer”。
2 char是基本数据类型,而String是个类,属于引用数据类型。String类可以调用方法,具有面向对象的特征。
*/
// 布尔值:是 非
boolean flag = true;
boolean flag2 = false;
}
}
引用类型(reference type)
类
接口
数组
数据类型扩展
public class Demo03 {
public static void main(String[] args) {
// 整数扩展: 进制 二进制0b 八进制0 十进制 十六进制0x
int i = 10; // 十进制
int i2 = 0b10; // 二进制
int i3 = 010; // 八进制 前面用0代表八进制
int i4 = 0X10; // 十六进制 前面用0x代表十六进制
/*
二进制化为十进制 1*2^1 + 0*2^0 = 1*2 + 0*1 = 2 + 0 = 2
八进制化为十进制 1*8^1 + 0*8^0 = 1*8 + 0*1 = 8 + 0 = 8
十六进制化为十进制 1*16^1 + 0*16^0 = 1*16 + 0*1 = 16 + 0 = 16
*/
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
//--------------------------------------------------------------------
// 浮点数扩展 银行业务里面钱怎么表示?
// float有舍入误差,对于两个数精确比较,应该避免使用浮点数,使用BigDecimal(类)
// 最好完全避免使用浮点数进行比较
float f = 0.1f; // 0.1
double d = 1.0/10; // 0.1
System.out.println(f==d); // false
float d1 = 1231231233123f; // 大到超出范围
double d2 = d1 +1;
System.out.println(d1==d2); // true
//--------------------------------------------------------------------
// 字符扩展
char c1 = 'a';
char c2 = '到';
System.out.println(c1);
System.out.println((int)c1);// 强制转换
System.out.println(c2);
System.out.println((int)c2);// 强制转换
// 所有字符本质还是数字,存在编码表里
// 一般使用Unicode(U0000~UFFFF)编码,一个字符对应编码表上的一个数值
char c3 = '\u0097';
System.out.println("asdas + " + c3);
// 转义字符
// \t 制表符
// \n 换行
// ...
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
}
}
类型转换
public class Demo04 {
public static void main(String[] args) {
//byte、short、chat->int->long->float->double
//强制转换 (类型)变量名 高到低
//自动转换 低到高
int i = 128;
byte b = (byte) i;
System.out.println(b);
//解释:这里byte的范围是-128~127,当int转为byte类型时,i=128超出了byte的范围(内存溢出),所以结果变了(精度不准确)
//--------------------------------------------------------------
/*
注意:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.高容量转为低容量的 数据类型时,会强制转换
4.转换的时候可能存在内存溢出,或者精度问题
*/
//案例:
//因为高转低(float转int),以下内存溢出,精度丢失
System.out.println((int)23.7); //23
System.out.println((int)-45.12); //45
//---------------------------------------------------------------
/*
操作比较大的数据时,注意溢出问题
JDK7新特性,数字之间可以用下划线分割
*/
int money = 10_0000_0000;
int years = 20;
int total = money*years;
long total2 = money*years;
System.out.println(total);// -1474836480,计算的时候溢出了
System.out.println(total2);// -1474836480,先计算了money*years,这里已经出问题了,所以前面的long没有发挥想要的效果
long total3 = (long)money*years;// 先把一个数转换为long
System.out.println(total3);
}
}
运算符
- 算数运算符:+、-、*、/、%(取余,也叫模运算)、++、–
- 赋值运算符:=
- 关系运算符:>、<、>=、<=、==、!=instanceof
- 逻辑运算符:&&、||、!
- 位运算符:&、|、^、~、>>、<<、>>>(了解即可)
- 条件运算符:? :
- 扩展赋值运算符:+=、-=、*=、/=
- 算数运算
public class Demo05 {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a+b);// 3
System.out.println(a-b);// -1
System.out.println(a*b);// 2
System.out.println(a/b);// 0。 为什么不是0.5?因为这里a、b都是int类型,得到的结果也是int类型,那么0.5向下取整就变成了0
System.out.println(a/(double)b);// 1。 让一个数先转为浮点数先,那么int*double就得到double,那么就正常得到0.5
long aa = 12312312123123L;
short bb = 23;
byte cc = 32;
int dd = 321;
float ee = 321.2F;
System.out.println(aa+bb+cc+dd);// long 最高为long,所以结果变成long
System.out.println(bb+cc+dd);// int byte与short相加都会得到int
System.out.println(cc+dd);// int byte与short相加都会得到int
System.out.println(ee+dd);// int byte与short相加都会得到int
/*
类型自动提升规则:
a和b作某种运算
a和b中有double,结果就是double
a和b中有float,结果就是float
a和b中有long,结果就是long
除此之外,结果都是int
把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;
*/
}
}
- 逻辑运算
由&&发现的新大陆:短路运算,如下:
public class Demo05 {
public static void main(String[] args) {
// 短路运算
int c = 5;
boolean d = (c<3)&&(c++<4);
System.out.println(d);// false 因为c<3,则后面的就不执行了,即c++<4不会执行了
System.out.println(c);// 5 因为c<3,则后面的就不执行了,即c++<4不会执行了,那么c++就没有+1,所以c还是5
}
}
-
位运算
A = 0011 1100
B = 0000 1101与:A&B = 0000 1100
或:A|B = 0011 1101
异或:A^B = 0011 0001
非:~B = 1111 0010
左移:2<<3;
2*8 = 2*2*2*2 = 16;
二进制 十进制
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
观察以上得知:
二进制计算使用位运算,效率极高!!
<< 代表 左移一位,相当于*2
>> 代表 右移一位,相当于/2
- 扩展:字符串连接符 +
public class Demo05 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a+b); // int 30
System.out.println(""+a+b);// string 1020 当+号里面有string类型时,string的前面正常计算,后面的会变成拼接,所以结果为“”+“10”+“20”=1020
System.out.println(a+b+"");// string 30 当+号里面有string类型时,string的前面正常计算,后面的会变成拼接,所以结果为30+“”=30
}
}
-
运算优先级
优先级记忆方法:单目乘除为关系,逻辑三目后赋值。(前辈总结的)单目运算符:一次作用一个变量的运算符,又叫一元运算符
单目:单目运算符+ –(正负数) ,++ –,!(逻辑非),~(按位取反)
乘除:算数运算符:* / % + - (* / %优先级肯定是大于±的)
为:位运算符:~(按位取反)<<(左移) >>(右移),^(也可以位运算,二进制异或)
关系:关系运算符:> < >= <= == !=
逻辑:逻辑运算符(除!)&& || & | ^
三目:条件运算符A > B ? X : Y
后:无意义,仅仅为了凑字数
赋值:= += -= *= /= %= |= &= ^=
说明:前优先级大于后,比如单目运算符也是位运算符,的优先级是单目级别的。至于赋值运算符中没有见过的自行测试所谓优先级,就是在表达式中的运算顺序。Java 中常用的运算符的优先级如下表所示:
包机制
- 为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。
- 包语句的语法格式为:package pkg1.pgk2.pkg3;
- 一般利用公司域名倒置作为包名;如www.baidu.com => com.baidu.www
- 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用“import”语句可完成此功能:import pkg1.pkg2.pkg3;
JavaDoc
- javadoc命令是用来生成自己的Api文档的
- 参数信息
- @author 作者
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
- 导出方式
- 命令行:javadoc -encoding UTF-8 -chatset UTF-8
- idea:自行百度…
结束
以上是观看 狂神说Java 的视频记录下来的笔记。阅读者需要可到b站观看相关,感谢阅读!
狂神说Java链接地址