Java基础
Java基础
- 目录:
![image-20251202210311223]()
注释
书写注释是一个非常好的习惯!平时写代码一定要注意规范!
Java的注释有三种:
-
单行注释:
//我是注释 -
多行注释:可以注释一段文字,/* 注释 */
/* 我是多行注释 我是多行注释 我是多行注释 我是多行注释 */ -
文档注释:与JavaDoc联合使用,/** 注释 */
/** *@Description HelloWorld *@Author Judy */
标识符
Java所有的组成部分都需要名字。类名、变量名和方法名都被称为标识符。
(一)关键词

(二)标识符注意要点:
-
标识符的首字符:必须以字母(A-Z或者a-z),美元符号($),下划线(_)
-
除了首字符之外,可以是字母(A-Z或者a-z),美元符号($),下划线(_),或数字的任意组合
- 合法标识符举例:age, $salary, _value, _1_value
- 非法标识符举例:123abc, -salary, #abc
-
不能用关键词作为变量名或方法名
-
标识符是大小写敏感的
-
可以使用中文作为标识符,但是非常不建议!(拼音也很low)
![image-20251125202826412]()
数据类型
1.强类型语言:要求变量的使用严格符合规定,所有变量都必须先定义后才能使用!
2.弱类型语言
Java的数据类型分成两大类:
-
基本类型(primitive type):数值类型(整数,浮点数);字符类型(char);布尔类型(占1位)
![image-20251125215219919]()
补充知识:
- 位(bit):是计算机内部数据存储的最小单位
- 字节(byte,用B表示):是计算机中数据处理的基本单位
- 关系:1 B = 8 bit
- 1024B=1KB,1024KB=1MB,1024MB=1GB,1024GB=1TB
- 字符:指计算机中使用的字母、数字、字(可以是单个汉字)和符号
-
引用类型(reference type):类;接口;数组
public class Demo02 {
public static void main(String[] args) {
//八大基本数据类型
//整数
//可以输入完整的类名(例如Integer,Byte等),按住Ctrl+点击类名,查看类的完整定义
int num1=10; //最常用
byte num2=20;
short num3=30;
long num4=40L; //long类型要在数值后面加个L
//小数(浮点数)
float num5=50.1F; //float类型要在数值后面加个F
double num6=3.14159265359;
//字符
char name1='A';
char name2='姜'; //可以是单个汉字
//字符串(不属于8大基本类型),String不是关键字,是类
String name32="judy";
//布尔值(代表是/非)
boolean flag=true;
//boolean flag=false;
}
}
数据类型扩展及面试题详解
public class Demo03 {
public static void main(String[] args) {
//==========================================================================
//整数拓展
//==========================================================================
//进制: 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i2 = 010; //八进制0
int i3= 0x10; //十六进制0x 0~9 A~F(15)
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
//==========================================================================
//浮点数扩展:float double
//有限 离散 舍入误差 大约 接近但不等于
//最好完全避免使用浮点数进行比较!!!
//(银行业务怎么表示?钱):BigDecimal数学工具类
//==========================================================================
float f =0.1f;
double d = 1.0/10;
System.out.println(f); //0.1
System.out.println(d); //0.1
System.out.println(f==d); //false
float f1 = 2313131313231231231f;
float f2 = f1+1;
System.out.println(f1==f2); //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(2字节):a=97 A=65 65536(0-65535)
//U0000-UFFFF
char c3='\u0061'; //十六进制
System.out.println(c3);
//转义字符
//制表符 \t
//换行 \n
System.out.println("Hello\tWorld!");
System.out.println("Hello\nWorld!");
String s1 = new String("Hello world");
String s2 = new String("Hello world");
System.out.println(s1==s2); //地址比较 false
System.out.println(s1.equals(s2)); //内容比较
System.out.println(s1.equals("Hello world"));
String s3 = "Hello world";
String s4 = "Hello world";
System.out.println(s3==s4);
//对象 从内存分析
//==========================================================================
//布尔值扩展
//==========================================================================
boolean flag=true;
//以下两种表达方式一样 Less is more!代码要精简易读
if(flag==true){}
if(flag){}
}
}
类型转换
由于java是强类型语言,所以要进行有些运算时,需要用到类型转换
1.强制类型转换: (类型)变量名 高 → 低
2.自动转化:低 → 高

public class Demo05 {
public static void main(String[] args) {
//强制类型转换: (类型)变量名 高 → 低
int i=128;
byte b=(byte)i; //内存溢出
System.out.println(i);
System.out.println(b);
//自动类型转换: 低 → 高
double d=i;
System.out.println(d);
/*
注意点:
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 c='a';
int i2=c+1;
System.out.println(i2);
System.out.println((char)i2);
}
}
public class Demo06 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
int money=1000000000;
System.out.println(money);
//JDK7新特性,数字之间可以用下划线分割(下划线不会被输出)
int money2=10_0000_0000;
System.out.println(money2);
int years=20;
int total=money*years;
System.out.println(total);//-1474836480,计算的时候溢出了
long total2=money*years;
System.out.println(total2);//-1474836480,默认是int,转换之前已经存在问题了
long total3=money*((long)years);
System.out.println(total3); //20000000000 正确! 先把一个数转换为Long
}
}
变量
-
变量是什么:可以变化的量!
-
Java是一种强类型语言,每个变量都必须声明其类型
-
Java变量是程序中最基本的存储单元(其要素包括:变量类型、变量名和作用域)
![image-20251202113506854]()
-
变量作用域:
-
类变量(即静态变量,static关键词):有默认值,不必初始化。
-
实例变量(即非静态成员变量):从属于对象;有默认值,不必初始化。
-
局部变量(写在方法里面的):无默认值,声明时必须进行初始化。必须显式初始化后才能使用!
![image-20251202114112057]()
public class Demo08 { //类变量 static:从属于类 static double salary=8000; //实例变量:1.从属于对象 2.如果不进行初始化,基本类型的默认值为0 0.0 u0000(char类型) //布尔值:默认是false //除了8大基本类型,其余的默认值都是null String name; int age; //main方法 public static void main(String[] args) { //局部变量:必须声明和初始化值,只在该方法{}内有效 int i=10; System.out.println(i); //实例变量 //变量类型 变量名=new Demo08(); Demo08 demo8=new Demo08(); System.out.println(demo8.name); System.out.println(demo8.age); //类变量 static System.out.println(salary); } //其他方法 public void add(){ } }
-
-
注意事项:
- 每个变量都有类型(可以是基本类型,也可以是引用类型)
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句(必须以分号结束)
- 不建议在同一行定义多个变量
public class Demo07 {
public static void main(String[] args) {
//int a,b,c; 不建议这样写在同一行!
//分行写有助于提升程序可读性
int a=1;
int b=2;
int c=3;
String name="judy";
char x='X';
double pi=3.14;
}
}
常量
-
常量(constant):初始化(initialize)之后不能再改变值!不会变动的值
-
常量可以理解为一种特殊的变量:它的值被设定后,在程序运行的过程中不允许被改变
- 通过final关键词来定义
![image-20251202115741635]()
-
常量名一般使用大写字符
public class Demo09 {
//变量类型之前的都是修饰符(static,final等),不存在先后顺序
static final double PI=3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
- 变量的命名规范:
- 所有的变量、方法名、类名:见名知意
- 类成员变量:首字母小写和驼峰原则,e.g. monthSalary (除了第一个单词以外,后面的首字母大写!)
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线,e.g. MAX_VALUE
- 类名:首字母大写和驼峰原则,e.g. Man, GoodMan
- 方法名:首字母小写和驼峰原则,e.g. run(), runRun()
运算符
多用()表示优先级
-
算数运算符:+,-,*,/,%(取余数),++,--
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=,instanceof
-
逻辑运算符:&&,||,!
-
位运算符:&,|,^,~,>>,<<,>>>(了解)
-
条件运算符: ?:
-
扩展赋值运算符:+=,-=,*=,/=
- 基本运算符
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//Ctrl+D:复制当前行到下一行
int a=10;
int b=20;
int c=21;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println((double)a/b); //0.5,若不加类型转换,结果为0
//====================================================
System.out.println(c%a); //模运算符(取余数) 21/10=2...1
//====================================================
//没有幂运算符
//很多运算,会使用一些工具类来操作! Math类
double pow= Math.pow(3,2);
System.out.println(pow);
}
}
- 不同类型的项相加,结果的类型为?
package operator;
public class Demo02 {
public static void main(String[] args) {
//低 -------------------------------------→ 高
//byte,short,char → int → long → float → double
long a= 1231213123123123L;
int b = 123;
short c = 10;
byte d = 8;
double e=0.1;
float f = 0.1f;
System.out.println(a+b+c+d+f+e); //double
System.out.println(a+b+c+d+f); //float
System.out.println(a+b+c+d); //long
System.out.println(b+c+d); //int
System.out.println(c+d); //int
//通过System.out.println((String)(c+d));可以看出结果为int类型
/*总结:
1.不同基本类型的数值做加法,结果的类型为加法项中最高的类型
2.若没有int以上类型的加法项,结果的类型为int
*/
}
}
package operator;
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b; //a=a+b
System.out.println(a);
a-=b; //a=a-b
System.out.println(a);
//===============================================================
//字符串连接符 +,只要有一个是String类型的,就会把其他部分也转换成String类型
//面试题:
// ""+a+b和a+b+""有什么区别?
System.out.println(""+a+b); //1020
System.out.println(a+b+""); //30
//结果:String类型的字符串在前,后面的项会拼接;String类型的字符串在后,前面的项依旧进行运算!
}
}
- 关系运算符
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果:布尔值(正确/错误)
//常与if一起使用
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);
}
}
- 自增、自减运算符(一元运算符)
package operator;
public class Demo04 {
public static void main(String[] args) {
//一元运算符:++ -- 自增 自减
int a = 3;
System.out.println(a);
//====================================================
int b = a++; //执行完这行代码后,先给b赋值,再自增
//a=a+1
System.out.println(a);
//====================================================
//a=a+1
int c = ++a; //执行完这行代码前,先自增,再给c赋值
System.out.println(a);
//====================================================
System.out.println(b);
System.out.println(c);
}
}
- 逻辑运算符
package operator;
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a&&b)); //逻辑与运算:两个变量都为真,结果才为真
System.out.println("a || b:"+(a||b)); //逻辑或运算:两个变量只要有一个为真,结果就为真
System.out.println("!(a && b):"+!(a&&b)); //如果是真,则变为假;如果是假,则变为真
//短路运算
int c = 5;
boolean d=(c<4)&&(c++<4);
System.out.println(d);
System.out.println(c); //c还是5,说明"(c++<4)"语句没有执行
// c<4为false,发生了短路运算
}
}
- 位运算符
package operator;
//位运算符(与二进制有关,运行效率极高!)
public class Demo06 {
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
>> 右移:把数值/2
0000 0000:0
0000 0001:1
0000 0010:2
0000 0011:3
0000 0100:4
0000 1000:8
0001 0000:16
*/
//面试题:2*8怎么计算最快?2*8=2*2*2*2
System.out.println(2<<3);
}
}
- 三元运算符
package operator;
//三元运算符
public class Demo08 {
public static void main(String[] args) {
//x ? y : z
//如果x==true,则结果为y,否则结果为z
int score = 80;
String type = score<60 ? "不及格" : "及格"; //必须掌握
System.out.println(type);
}
}
包机制
-
为了更好地组织类,Java提供了包机制,用于区分类的命名空间
-
包的语法格式为:
package pkg1;
一般利用公司域名倒置作为包名,例如www.baidu.com的倒置为com.baidu.www
- 为了能够使用某一个包的成员,我们需要使用"import"语句明确导入该包
import pkg1 (classname | *);
- 注意:
- import语句必须写在package语句之下!package语句必须放在首行!
- 不同的包中的类名,尽量不要重复
JavaDoc
-
javadoc命令是用来生成自己API文档的(可以加在类/方法上)
-
参数信息:
-
@author :作者名
-
@version:版本号
-
@since:指明需要最早使用的jdk版本
-
@param:参数名
-
@return:返回值情况
-
@throws:异常抛出情况
-
-
方法:
- 通过命令行生成index.html文件
javadoc java文件

- 使用IDEA生产javadoc文档
![image-20251202211554223]()







浙公网安备 33010602011771号