Java基础
JAVA基础
一、注释、标识符、关键字
Java基础01:注释
1、为什么会用注释:对于初学者而言,我们编写的代码,代码量比较少,我们或者他人还是很容易看懂并理解;但是我们所需要构建的项目过于复杂时,我们就需要用到注释了。
2、书写注释的必要性与好处:正所谓“咱们不会去做无用功”,而写注释也是一样;我们要有一个良好的书写注释的习惯,不仅有利于自己看懂自己的代码;而且不管是在生活中还是以后的工作中也有利于别人读懂你的代码。
3、注释不会影响你的代码,而且也不会被执行;写的注释是给人看的。
4、Java中的三种注释:
- 单行注释: //这是单行注释(只能注释一行文字)
-
- 多行注释: /**/这是多行注释(可以注释一段文字)
- 文档注释:/** */这是文档注释
在这里给大家推荐看一下一些有趣的注释,这里直接看大佬原创文章:撒花膜拜
Java基础02:标识符、关键字
- 关键字:对Java的编译器有特殊的意义,用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数
【注:上图的单词不认识且不知道怎么用没关系哦,以上关键字在后面的学习中,都会认识并且知道怎么用的】
- 标识符:Java所有的组成部分都需要名字。类名、变量名以及方法都被称为标识符。
- 标识符注意点:
- 所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线()开始。
首字符之后可以是字母(A-Z或者a-z),美元符($),或者下划线()或数字的任何字符组合。
不能使用关键字作为变量名或方法名。
标识符是大小写敏感的。
合法标识符举例:age,$salary,_value,__1_value
非法标识符举例:123abc,-salary,#abc
可以使用中文命名,但是一般不建议使用;也不建议用拼音,看上去很Low。
- 所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线()开始。
看图加深理解:
二、数据类型
Java基础03:
-
强类型语言:
- 要求变量的使用严格符合规定,所有的变量必须先定义后才能使用;安全性高,速度低;
-
弱类型语言:
- 变量的使用可以不严格符合规定,所有的变量不一定要先定义后才能使用;安全性较低,速度快;
Java的数据类型分为两大类
- 基本类型(Primitive type)
- 引用类型(Reference type)
-
什么是字节?
-
位(bit):计算机内部数据存储的最小单位,11001100是一个八位二进制数;
-
字节(byte):计算机中数据处理的基本单位,习惯上用大写B来表示。
-
1B(byte,字节) = 8bit(位)
-
字符:计算机中使用的字母、数字、字和符号。
1bit表示1位; 1 byte (字节)= 8 bit(位); 1 KB = 1024 B(字节); 1 MB = 1024 KB; (2^10 B); 1 GB = 1024 MB; (2^20 B); 1 TB = 1024 GB; (2^30 B);
Java基础04:数据类型扩展
public class Demo03 { public static void main(String[] args) { //整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x int i=0b10;//二进制0b int i1=10;//十进制 int i2=010;//八进制0 int i3=0x10;//十六进制0x 0~9 A~F 16 System.out.println(i); System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println("============================================================="); //============================================================= //浮点数拓展: 银行业务怎么表示?钱 //BigDecimal 数学工具类 //============================================================= //float: 有限 离散 存在舍入误差 只是大约 接近但不等于 //double; //最好完全使用浮点数进行比较 //最好完全使用浮点数进行比较 //最好完全使用浮点数进行比较 float f = 0.1f; //0.1 double d = 1.0/10; //0.1 System.out.println(f==d);//false float d1 = 213131313212313f; float d2 = d1+1; System.out.println(d1==d2);//true System.out.println("============================================================="); //============================================================= //字符拓展? //============================================================= 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;65=A) 2字节 0~65536 Excel 2的16次方=65536 //U0000 UFFFF char c3 = '\u0061'; System.out.println(c3);//a System.out.println("============================================================="); //转义字符 // \t 制表符 // \n 换行 System.out.println("Hello\tWorld"); System.out.println("Hello\nWorld"); System.out.println("============================================================="); // String sa = new String("Hello world"); String sb = new String("Hello world"); System.out.println(sa==sb);//false String sc = "Hello world"; String sd = "Hello world"; System.out.println(sc==sd);//true //对象 从内存分析 //布尔值扩展 boolean flag = true; if(flag==true){} //新手 if(flag){} //老手 //Less is More! 通俗讲:精简易读 } }
-
三、类型转换
Java基础05
1、为什么需要类型转换?
答:由于Java是强类型语言,所以要进行某些运算的时候,需要用到类型转换。
优先级:低--------------------------------------------------------------->高
byte,short,char-> int -> long -> float -> double
2、如果运算时,不同类型的数据先转化为同一类型,然后进行运算。
3、两种转化类型:
- 强制类型转化
- 自动类型转化
public class Demo04 {
public static void main(String[] args) {
int i = 128;
byte b = (byte) i;//byte超过最大值了,导致内存溢出了,在转化过程中要避免此类情况发生
//强制转化 (类型名)+变量名 高--->低
//自动转化 低--->高
double c = i;
System.out.println(i);
System.out.println(b);
System.out.println(c);
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转化为不相干的类型
3.在把高容量转换到低容量时,强制转换
4.强制转换时可能存在内存溢出,或者精度问题!
*/
System.out.println("=================");
System.out.println((int)23.7);//23
System.out.println((int)-45.89f);//-45
System.out.println("=================");
char d = 'a';
int e = d+1;
System.out.println(e);
System.out.println((char)e);
}
}
4.溢出问题
public class Demo05 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//JDK7以上新特性,数字可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years;//-1474836480,计算的时候溢出了
long total2 = money*years;//-1474836480,先是默认为int时,money和years相乘,而乘的结果已经出问题了,
// 再把结果转化为long型也是有问题的
// 正确操作
long total3 =money*((long)years);
System.out.println(total);
System.out.println(total2);
System.out.println(total3);
//long 后面的L和l,但因为小写l容易看成1所以尽量用大写,以区分
}
}
四、变量、常量
Java基础06:变量、常量、作用域
- 变量:
- 变量是什么:就是可以变化的量;
- Java时一种强类型语言,每个变量必须声明其类型。
- Java变量时程序中最基本的存储单元,其元素包括变量名,变量类型和作用域
type varName [=value] [{,varName[=value]}];
//数据类型 变量名 = 值; 可以使用逗号隔开来声明多个同类型变量。
public class Demo06 {
public static void main(String[] args) {
//int a,b,c;//变量声明,但不建议同时声明多个变量
//int a=1,b=2,c=3;
//以上不是很提倡,我们要让程序具有可读性
String name = "Devin~Y";
char x = 'X';
double pi = 3.14;
}
}
- 注意事项:
a、每个变量都有类型,类型可以是基本类型,也可以是引用类型。
b、变量名必须是合法的标识符。
c、变量声明必须是完整的语句,因此每一个声明必须以分号结束。
- 类变量
- 实例变量
- 局部变量
public class Variable{
static int allClicks=0;// 类变量
String str="Hello World";// 实例变量
public void method(){
int i=0;// 局部变量
}
}
public class Demo07 {
//类变量 static
static double salary = 2500;
//属性;变量
//实例变量从属与对象;如果不自行初始化,默认值为0或者0.0
//布尔值默认为false
//除了基本类型,其余默认值都为null;
String name;
int age;
//main方法
public static void main(String[] args) {
//局部变量:必须声明和初始化值
int i=10;
System.out.println(i);
//变量类型 变量名字=new Demo07();
Demo07 demo07 = new Demo07();
System.out.println(demo07.age);
System.out.println(demo07.name);
//类变量 static
System.out.println(salary);
}
//其他方法
public void add(){
}
}
- 常量
- 什么是常量:顾名思义,初始化后不能再改变的值!不会发生变动的值;
- 常量可以理解为是变量的一种特殊形式,它的值被设定后,在运行过程中是不允许被改变的;
final 常量名=值;
final double PI=3.14;
- 常量名一般用大写;
public class Demo08 {
//修饰符,不存在先后顺序
final static double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
- 变量的命名规范
- 所有变量、方法、类名:见名知意;
- 类成员变量:首字母小写和驼峰原则;monthSalary;除了第一个单词外,后面的单词首字母大写name;
- 局部变量:首字母小写和驼峰原则;
- 常量:大写字母和下划线:MAX_VALUE;
- 类名:首字母大写和驼峰原则:Man,GoodMan;
- 方法名:首字母小写和驼峰原则:run(),runRun();
五、运算符
Java基础07:基本运算符
-
算术运算符:+、-、*、/、%、**、--
-
赋值运算符:=
-
关系运算符:>、<、>=、<=、==、!=instanceof
-
逻辑运算符:&&、||、!
-
位运算符:&、|、^、~、>>、<<、>>>(了解!!!)
-
条件运算符
-
扩展赋值运算符:+=、-=,*=、/=
public static void main(String[] args) { // 二元运算符,算术运算符 int a = 10; int b = 20; int c = 25; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println((float)a/b); System.out.println(c%b);//结果为5————————> 25/20=1.....5 } =================================================== public static void main(String[] args) { //关系运算符返回的结果:正确,错误 布尔值 int a = 10; int b = 20; System.out.println(a>b); System.out.println(a<b); System.out.println(a==b); System.out.println(a!=b); }
Java基础08:自增自减运算符(重要)、初始Math类
public static void main(String[] args) {
//++(自加) --(自减) ----------->一元运算符
int a = 3;
int b = 3;
System.out.println(a++);//结果为3
System.out.println(a);//结果为4
System.out.println(++a);//结果为5
System.out.println(b--);//结果为3
System.out.println(b);//结果为2
System.out.println(--b);//结果为1
//以上可以得出,如果++或者--出现在变量值之前,则会马上加一或者减一 ;口诀(++ ,--放前面,先赋值,再自增)
//但是放在后面,则会先把该变量值原本的值给输出后,才会加一或者减一 ; 口诀(++ ,--放后面,先自增,再赋值)
//上述例子多分析几次,则可以轻松看出
//幂运算 2^3------->2*2*2=8
double pow = Math.pow(2, 3);
System.out.println(pow);//结果为8
//这种方法需要借助Java自带的 Math工具类,以便为了各种数学计算,后面单独写一篇各种Java工具类,期待后续哦!
}
Java基础09:逻辑运算符、位运算符
public static void main(String[] args) {
//与 (&&) 或 (||) 非 (!)
// and or 取反
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
System.out.println("===========================");
int a1 = 1;
int b1 = 0;
System.out.println("a && b:"+(a&&b));//false
System.out.println("a || b:"+(a||b));//true
System.out.println("!(a && b)"+!(a&&b));//true
//以上结果可以得出结论:
/*
逻辑与运算(&&):两者判断, 一 true 一 false则为false;两个为true则为true;两个为false则必为false
逻辑或运算(||):两者判断, 一 true 一 false则为true;两个为true则必为true;两个为false则为false
逻辑非运算(!):两者判断,是true则为false;是false则为true。
*/
//还有一种运算短路情况:即在逻辑与运算中如果前者就为false,则直接为false,后者不会在运算了
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
}
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~B = 1111 0010
除 ^ 两者相同取0,不相同取1以外,其他三个与前面逻辑运算对照来看。
2*8 = 16 2*2*2*2
效率极高
<<左移 *2
>>右移 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);//结果为16
System.out.println(2>>1);//结果为1
}
三元运算符级小结
public static void main(String[] args) {
int a =10;
int b = 20;
a+=b;//相当于 a=a+b;
b-=a;//相当于 b=b-a;
System.out.println(a);//30
System.out.println(b);//-10
//字符串连接符 + 号
System.out.println(a+b);
System.out.println(""+ a + b);//结果为 a=30;b=-10
System.out.println(a + b+"");//结果为 20
}
public static void main(String[] args) {
// x ? y : z
//如果x==true,则结果为y,否则为z
int a =10;
int b =20;
String m = a+b>30? "30":"50";
String n = a+b>20? "30":"50";
System.out.println(m);//结果为50
System.out.println(n);//结果为30
}
运算符优先级需要大家自己去了解哦。
六、包机制、JavaDoc
Java基础11:包机制
- 为了更好的组织类,Java提供了包机制,用于区别类名的空间。
- 包语句的语法格式为:
package pkg1[.pkg2[.pkg3...]];
- 注:一般用公司域名倒置作为包名:
- 为了能够使用某一个包成员,我们需要在Java程序中明确导入该包,使用“import”语句可以完成此功能
import package1[.package2...].(classname|*);
Java基础12:JavaDoc生成文档
- javadoc命令是用来生成自己的API文档的————Java的帮助文档地址https://docs.oracle.com/javase/8/docs/api/
/*
* @author Devin~Y
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/*
* @author Devin~Y
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
/*
* @author 作者名
* @version 版本号
* @since 指明需要最早使用的jdk版本
* @param 参数名
* @return 返回值类型
* @throws 异常抛出情况
*/
}
这一篇干货满满哦!