【狂神说Java】学习笔记8:Java基础语法
【狂神说Java】学习笔记8:Java基础语法
[01] 注释,标识符,关键字
[02] 数据类型
[03] 类型转换
[04] 变量,常量
[05] 运算符
[06] 包机制,JavaDoc
[01] 注释,标识符,关键字
注释
注释是属于备注内容的东西,不会被程序执行。
写备注的好处是方便自己回忆和让其他人理解自己的代码。
// 注释方法1:单行备注。
/*
注释方法2:多行备注。
*/
/** 注释方法3:文档注释,每行一个星号,写的文档信息会被识别的。
* @Description HelloWorld
* @Author Alvin.Wang
*/
改变注释的格式和颜色做法
标识符和关键字
Java代码里高亮的文字就是关键字,具有特殊含义。变量命名的时候避免使用这些词,
Java的关键字基本上就是下面这些了。
标识符的注意点
Java对大小写十分敏感,变量Man和变量man不是同一个东西。
命名的话尽量用英文而非中文,比如用 name 就不要用 mingzi 。
[02] 数据类型
强类型语言:强类型定义语言。它要求变量使用要 严格 符合规范,所有变量必须定义后才能生效。比如Java,C语言,C++等。安全性高反而运行速度会慢。
弱类型语言:相比于强类型语言,vb或者JavaScript的代码要求就没有那么严格。
数据类型
数据类型包括:数值类型和引用类型。
数值类型:整数类型,浮点类型,字符类型,布尔类型。
引用类型:类,接口,数组。
/* 八大数值类型 */
// 整数
int num1 = 10; //最常用的
byte num2 = 20;
short num3 = 30;
long num4 = 30L; //long类型一般在数字后面加上L,声明是long类型
// 浮点类型。小数
float num5 = 50.1F; //float类型要在末尾加F
double num6 = 3.141592653;
// 字符
char name = 'A';
// 字符串,字符的组合拼接。
String namea = "China";
// 布尔值,只有true和false两个值。
boolean flag_yes = true;
boolean flag_no = false;
字节
拓展事例(含面试题)
整数拓展事例
// 整数拓展:进制写法。二进制0b,八进制0,十进制,十六进制0x,
int i = 10;
int i1 = 010; // 八进制0
int i2 = 0x10; // 十六进制0x 由0-9和A-F组成
System.out.println("10进制i=" + i ); // 10进制i=10
System.out.println("8进制i1=" + i1 ); // 8进制i1=8
System.out.println("16进制i2=" + i2 ); // 16进制i2=16
浮点拓展事例
事例1:float f=0.1f ,double d=1.0/10,但是两个数竟然不相等。明明得到的值都为0.1...
事例2:float d1=231212312314235125f, float d2=d1+1,但是两个数竟然相等。
float 是有限的,离散的,舍入误差。无法完全等于,只会无限接近。
避免用浮点数进行比较!!!
因此银行系统会使用 BigDecimal (Java的大数类型,数学工具类型的)
字符拓展事例
所有的字符本质还是数字。文字是从数字编码而来,使用Unicode来编码的。
布尔值拓展
boolean flag = true;
if(flag == true){} //新手写法,重新强调flag
if(flag){} //老手写法,无需再次强调flag的真假。
//Less is More 代码要精简易读
[03] 类型转换
事例1
强制转换:由高到低时发生溢值。类似于2L的桶水倒到矿泉水瓶里。
转换时的注意点:1.布尔值不能转换;2.不可转换为不相干类型;3.高容量转到低容量;4.强制转换时注意内存溢出,或精度问题。
事例2
[04] 变量,常量
变量
// 变量赋值
// int a=1,b=2,c=3; 程序可读性差,开发时不要这样写
int a =1;
int b =2;
String name = "wang";
char x = 'X';
double pi = 3.14;
变量作用域
类变量:全局可用,必须在前面加上static关键字。
实例变量:从属于整个对象/类,作用域更大。可以不用初始化,且有默认值。
默认值是0(整数型),0.0(浮点型),false(布尔类型),null(字符型)
局部变量:写在方法里面,作用于这个方法内部。且必须声明和初始化赋值。
public class Demo08 {
// 变量
// ●1● 类变量 static必须加起来
// 这样就不用像 实例变量一样还需要再new了。
static double salary = 2500;
// ●2● 实例变量:从属于对象。用的话调用 Demo08.name即可。
String name;
int age;
// main方法
public static void main(String[] args) {
// ●3● 局部变量:必须声明和初始化赋值。
int i = 10;
System.out.println(i);
// 实例变量的调用。
// 变量类型 变量名称 = new Deme08(); 自引用类型。
//小技巧:输入new Demo08()之后摁住Alt + Enter即可自动形成下一行声明。
Demo08 demo08 = new Demo08();
System.out.println(demo08.name);
System.out.println(demo08.age);
//类变量 static 可以直接调用并输出结果。
System.out.println(salary);
}
// 其他方法
public void add(){
}
}
常量
不会变动的值。从一而终是一个值。用final定义。一般名称是大写的。
[05] 运算符
运算符
算数运算符:二元运算
// 二元运算符
// 小技巧: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);
// 10/20 结果0.5但显示为0,此时给a或b转类型为double即可
System.out.println((double)a/b);
// % :取模运算。余数为1
System.out.println(21%20); // 1
浮点的二元运算
浮点的计算结果默认是int类型,如果有long类型则默认是long类型。
// 浮点的二元运算
// 结论:计算结果默认是int类型,如果有long类型则默认是long类型。
long a = 1231311L;
int b = 123;
short c = 10;
byte d = 8;
System.out.println(a+b+c+d); //long类型: 1231452
System.out.println(b+c+d); //int类型:141
System.out.println(c+d); //int类型:18
System.out.println((double)c+d);//强转类型double后为18.0
boolean关系运算符
// boolean值的 关系运算符返回的结果
int a = 10;
int b = 20;
int c = 21;
System.out.println(a>b); //false
System.out.println(a<b); //true
System.out.println(a==b); //false
System.out.println(a!=b); //true
自增自减运算符,也叫一元运算符。
// ++ 和 -- 自增自减运算符。
// b=a++; 实际就是 b=a,a=a+1; 的步骤。
// c=++a; 实际就是 a=a+1,c=a; 的步骤。
// 区别:a++ (先把a的值交出去,再完成自增) ;++a (先自增,再把结果交出去。)
int a =3;
int b =a++; // 解释:此时a先把值给b,b=3,然后a自增,a=4。
System.out.println(a); // a=4
System.out.println(b); // b=3
int c =++a; // 解释:此时a先自增a=5,然后把值给c,c=5。
System.out.println(a); // a=5
System.out.println(c); // c=5
// 幂运算 2~3=2*2*2=8
// 快捷输入:Math.pow(2, 3) 然后Alt+Enter即可。
double pow = Math.pow(2, 3);
System.out.println(pow); //8.0
逻辑运算与短路运算
// 逻辑运算符
// 与(a&&b)运算:两个都真则真,一真一则全假,两全假则假。
// 或(a||b)运算:两个都真则真,一真一则也真,两全假则假。
// 非运算:结果的反值。
boolean a = true;
boolean b = false;
System.out.println("逻辑与运算 a&&b: " + (a && b)); //false
System.out.println("逻辑或运算 a||b: " + (a || b)); //true
System.out.println("逻辑非运算 !(a&&b): " + (!(a && b))); //true
// 短路运算
// 在进行与运算的时候,&&前面出错的话就不计算符号后面的了。
int c=5;
boolean d=(c<4)&&(c++<4); //&&左的计算式错误,因此不进行右边的计算。c还是5
System.out.println(d); //false
System.out.println(c); //5
boolean e=(c>4)&&(c++<4); //&&左的计算式对,右边c++之后是6,小于4,e错。
System.out.println(e); //false
System.out.println(c); //6 进行了c++的计算,因此c增长了。
位运算符
/* 位运算符,基本上是涉及计算机用的计算问题
A = 0011 1100
B = 0000 1101
---------- 位运算 ----------
A&B = 0000 1100 与位:都为1才是1
A|B = 0011 1101 或位:只要有个1则为1
A^B = 0011 0001 取反:相同则0,否则为1
~B = 1111 0010 反B。
*/
/* 位运算实例 :快速计算2*8 即2*2*2*2
0000 0000 0
0000 0001 1
0000 0010 2 1左移1位,1*2
0000 0011 3
0000 0100 4 1左移2位,1*2*2
0000 1000 8 1左移3位,1*2*2*2
0001 0000 16 1左移4位,1*2*2*2*2
因此左移 << 是 *2
右移 >> 是 /2
*/
System.out.println(2<<3); //16 2*(2*2*2)
System.out.println(16>>3); //2 16/2/2/2
拓展逻辑运算符及字符串拼接
// 拓展逻辑运算符
int a = 10;
int b = 20;
a += b; //a = a+b =30
a -= b; //a = a-b =-10
System.out.println(a);
// 字符串连接符 + , String
System.out.println(a+b+""); //30 先计算了a+b再拼接
System.out.println(""+a+b); //1020 识别了字符串符号,于是进行数字拼接1020
三元运算:条件运算符
/* 三元运算符:条件运算符
X ? Y :Z 若X为true,则结果为Y,否则结果为Z
*/
int score = 55;
String type = score < 60?"不及格":"及格";
System.out.println(type); //不及格
[06] 包机制,JavaDoc
包机制
包的本质就是文件夹。防止命名空间重复。
一般公司域名倒叙作为包名。
定义包叫package,引入包叫import。
JavaDoc
百度搜索 JDK帮助文档 即可。此链接https://www.matools.com/api/java8
package operator;
// 类的注释
/**
* @author Alvin.Wang 作者
* @version 1.0 版本
* @since 1.8 需要最早使用的jdk版本
*
*/
public class Doc {
String name;
// 方法的注释,下面代码及类注解写好之后,输入/**回车自动生成方法注解。
/**
*
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
JavaDoc的作用
JavaDoc的注解和普通注释有什么区别?
首先找到代码所在文件夹。
然后找到文件夹,在前面输入 cmd
以及 空格
,接着进入Dos界面,并输入javadoc -encoding UTF-8 -charset UTF-8 Doc.java
通过这行指令,把Doc文档的文字编码以UTF-8输出,更适应于中文环境。
此时发现原文件夹生成很多文件,其中点击index.html
(index首页)你会打开一个很像官方文档的东西,里面就是你Doc.java
的文档版本,把Doc.java的参数信息也都写进去了。
【拓展内容】
@ IDEA使用快捷键:Ctrl + D 复制当前内容到下一行
重视基础,不要放过每个练习的机会和小细节。
按照教程来大家都可以一点点积累,进步,熟悉,消化变成自己的东西。
之前看到一个博主的文章,内容写着类似:
“看完这些内容再不会建议你不要学了,可能你不适合这一行!”
我就一口老Tan(不带酸菜)差点喷涌而出!NM算老几,
劳资看了还不会只能说明你写的不明白,不鼓励别人也就算了,但千万别诋毁别定义别人。同样一撇一捺,望你做个人吧!
断断续续学了Java基础这课,总算结束了。一看学到了30多节了,很快啊
午间看新闻的时候,看到了一个很养眼的美女主播,
对世界又有了美好的幻想。。
咳咳...养养眼还是挺好的。(柯南发亮眼镜表情)