Java基础
Java基础
空项目配置
创建空的项目
File--Project--Empty Project
Project name: javaSE
Project location: D:\ITOM\java\kuangstudy\project
配置JDK信息
File--Project Structure--Project
注释
- 平时我们编写的代码, 在代码量比较少的时候, 我们还可以看懂自己写的, 但是当项目结构一旦复杂起来, 我们就需要用到注释了
- 注释并不会执行, 是给我们写代码的人看的
- 书写注释是一个非常好的习惯
单行注释
- 可以注释单行内容, 格式: // 内容
# 快捷键 Ctrl+/
public class HelloWorld {
public static void main(String[] args) {
// 输出一个HelloWorld
System.out.println("HelloWorld");
}
}
多行注释
- 可以注释一段文字, 格式: /* 内容 */
# 快捷键 Ctrl+Shift+/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
/*
多行注释1
多行注释2
*/
}
}
文档注释
- 可以注释文档, 格式: /** 内容 */
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
/**
* @deprecated HelldWorld
* @Author 狂神说java
*/
}
}
有趣的代码注释
/***
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ____/`---'\____
* . ' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
*
* .............................................
* 佛祖保佑 永无BUG
*/
Java关键字
- java所有的组成部分需要名字, 类名, 变量名以及方法被称为标识符
abstract assert boolean break byte case
catch char class const continue default
do double else enum extends final
finally float for goto if implements
import instanceof int interface long native
new package private protected public return
strictfp short static super switch synchronized
this throw throws transient try void
volatile while
Java标识符
java标识符注意点
- 所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线(_)开始
- 不能使用关键字做为变量名或方法名
- 标识符是大小写敏感的
- 合法标识符: age, $salary, _value, -1_value
- 非法标识符举例: 123abc -abc #abc @abc
- 可以使用中文命名,但不建议
public class Demo01 {
public static void main(String[] args) {
String Ahello = "test1";
String ahello = "test2";
String _Ahello = "test3";
String $Ahello = "test4";
// String #Ahello = "test5"; # 不支持
// String 123Ahello = "test6"; # 不支持
System.out.println(Ahello);
}
}
字节
-
位(bit): 是计算机内部数据存储的最小单位, 11001100是一个八位二进制数
-
字节(byte): 是计算机中的数据处理的基本单位, 习惯上用大写B来表示
-
1B(byte, 字节) = 8bit(位)
-
字符: 是指计算机中使用的字母, 数字, 字和符号
-
1bit表示1位
-
1Byte表示一个字节 1B = 8bit
-
1024B =1 KB
-
1024KB = 1MB
-
1024MB = 1GB
-
数据类型
-
强类型语言
- 要求变量的使用要严格符合规定, 所有变量必须先定义后才能使用
-
弱类型言
-
Java的数据类型分为两大类
-
基本类型(primitive type)
-
public class Demo03 { public static void main(String[] args) { // 八大基本数据类型 // 整数 int num1 = 10; // 最常用 byte num2 = 120; short num3 = 30; long num4 = 30L; // Long类型要在数字后面加个L // 小数: 浮点数 float num5 = 50.1F; // float类型要在数字后面加个F double num6 = 3.141592653589; // 字符 char name = 'A'; // 字符串 String str1 = "测试"; // 布尔值: 是非 boolean flag1 = true; boolean flag2 = false; } }
-
引用类型(reference type)
-
整数类型扩展
public class Demo04 {
public static void main(String[] args) {
// 整数扩展: 进制 二进制0b 十进制 八进制0 十六进制0x
int num1 = 10;
int num2 = 010; // 八进制0
int num3 = 0x10; // 十六进制0x
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
}
浮点类型扩展
- float 有限 离散 舍入误差 大约 接近但不等于
- 最好完全使用浮点数进行比较
public class Demo04 {
public static void main(String[] args) {
// 浮点数扩展
float num4 = 0.1f; // 0.1
double num5 = 1.0/10; // 0.1
// 浮点数存在舍入误差,接近不等于的因素,导致看似一样的值却不相等
System.out.println(num4==num5); //false
// 浮点数存在舍入误差,接近不等于的因素,导致看似不相等的值却相等
float num6 = 123123123123123123f;
float num7 = num6 + 1;
System.out.println(num6==num7); // true
}
}
字符扩展
- 所有的字符本质还是数字,因为Unicode编码表
public class Demo04 {
public static void main(String[] args) {
// 字符拓展
char str1 = 'a';
char str2 = '中';
System.out.println(str1);
System.out.println((int)str1); // 强制转换为int类型
System.out.println(str2);
System.out.println((int)str2); // 强制转换为int类型
// 所有的字符本质还是数字,因为Unicode编码表
// 编码 Unicode表 (97 = a 65 = A)2字节, 汉字一样也有自己的数字编码
char str3 = '\u0061';
System.out.println(str3); // a
}
}
转义字符
-
public class Demo04 { public static void main(String[] args) { //转义字符 /* \t 制表符 \n 换行 ... */ System.out.println("Hello\tworld"); // Hello world System.out.println("Hello\nworld"); }

布尔值扩展
public class Demo04 {
public static void main(String[] args) {
// 布尔值扩展
boolean flag1 = true;
if (flag1==true){} // 新手写法
if (flag1){} // 老手
// Less is More! 代码要精简
}
}
类型转换
-
由于Java是强类型语言, 所以要进行有些运算的时候需要用到类型转换
-
低--------------------------------------高 byte->short->char->int->long->float->double
-
运算中, 不同类型的数据先转化为同一类型, 然后进行运算
-
强制转换, 高--低, 需要注意在转换过程中的内存溢出和精度问题
public class Demo05 {
public static void main(String[] args) {
int num = 128;
// 内存溢出 byte类型 -128~127
byte b = (byte)num;
System.out.println(num); // 128
System.out.println(b); // -128
/*
注意点:
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 在把高容量转换到低容量的时候,强制转换
4. 转换的时候可能存在内存溢出或精度问题
*/
// 高转低, 强制转换, 精度问题
System.out.println((int)23.7); // 23
System.out.println((int)-45.89f); // -45
}
}
- 自动转换, 低--高
public class Demo05 {
public static void main(String[] args) {
int num1 = 128;
double d1 = num1;
System.out.println(num1);
System.out.println(d1);
// 低转高
char c = 'a';
int d = c + 1;
System.out.println(d); // 98
System.out.println((char) d); // b
}
}
- 操作比较大的数据的时候, 注意溢出问题
public class Demo06 {
public static void main(String[] args) {
// 操作比较大的数据的时候, 注意溢出问题
// JDK7新特性, 数字之间可以用下划线分割,并且下划线不会被输出
int money = 10_0000_0000;
System.out.println(money);
int years = 20;
int total = money * years; // -1474836480 计算的时候溢出了
System.out.println(total);
long total1 = money * years; // -1474836480 默认是int, 转换之前就已经存在问题了
System.out.println(total);
long total2 = money * ((long)years); // 20000000000 行把一个数转为long
System.out.println(total2);
}
}
变量
- 变量是什么: 就是可以变化的量!
- Java是一种强弱语言,每个变量都必须声音其期类型
- Java变量是程序中最基本的存储单元, 其要素包括变量名, 变量类型和作用域
type verName [=value] [{,verName[=value]}];
// 数据类型 变量名 = 值: 可以使用逗号隔开来声明多个同类型变量
public class Dome07 {
public static void main(String[] args) {
// int a, b ,c 不建议这么写,建议程序可读性
int a=1, b=3, c=3;
String name = "terry";
char x = 'x';
double pi = 3.14;
}
}
- 注意事项:
- 每个变量都有类型, 类型可以是基本类型, 也可以是引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句, 因此每一个声明都必须以分号结束
变量的命令规范
- 所有变量, 方法, 类名, 见名知意
- 类成员变量: 首字母小写和驼峰原则
- 局部变量: 首字母小写和驼峰原则
- 常用: 大写字母和下划线
- 类名 : 首字母大写和驼峰原则
- 方法名: 首字母小写和驼峰原则
变量作用域
- 类变量
- 实例变量
- 局部变量
public class Demo09 {
static int num1 = 0; // 类变量
String str = "hello,world"; // 实例变量
public static void main(String[] args) {
int num2 = 1; // 局部变量
System.out.println(num2);
System.out.println(num1); // 调用类变量
Demo09 demo09 = new Demo09();
System.out.println(demo09.str); // 调用实例变量
}
}
public class Domo08 {
// 类变量 static
static double salary = 2500;
// 实例变量
/*
实例变量: 从属于对象, 如果不自行初始化, 类型就会走默认值
整数类型: 默认值为0
布尔类型: 默认值为false
除了基本类型, 其它的默认值都为null
*/
String name;
int age;
// main方法
public static void main(String[] args) {
// 局部变量:必须声音和初始化值
int num = 10;
System.out.println(num);
// 变量类型
Domo08 domo08 = new Domo08();
System.out.println(domo08.age); // 0
System.out.println(domo08.name); // null
// 类变量 static
System.out.println(salary);
}
// 其它方法
public void add(){
int i = 0; //局部变量
}
}
常量
- 常量(Constant): 初始化后不能改变值! 不会变动的值
- 所谓常量可以理解成一种特殊的变量, 它的值被设定后, 在程序运行过程中不允许被改变
- 常量名一般使用大写字符
final 常量名=值;
final double PI=3.14;
public class Demo09 {
// 修饰符, 不存在先顺序
static final double PIA=3.14;
final static double PIB=3.14;
public static void main(String[] args) {
System.out.println(PIA);
}
}
运算符
Java 语言支持如下运算符:
- 算术运行符: +, -, *, /, %, ++, --
- 赋值运算符: =
- 关系运算符: >, <, >=, <=, ==, !=
- 逻辑运算符: &&, ||, !
- 位运算符: &, |, ^, ~, >>, <<, >>>
- 条件运算符: ?
- 扩展赋值运算符: +=, -=, *=, /=
二元运算
package operator;
public class Demo01 {
public static void main(String[] args) {
// 二元运算符
int num1 = 10;
int num2 = 20;
System.out.println(num1+num2);
System.out.println(num1-num2);
System.out.println(num1*num2);
System.out.println(num1/(double)num2); // 有小数时需要转换一下
}
}
package operator;
public class Demo02 {
public static void main(String[] args) {
long num1 = 123123123123123L;
int num2 = 123;
short num3 = 10;
byte num4 = 8;
// 运算中最大类型包括long, 结果为long类型
System.out.println(num1+num2+num3+num4);
// 运算中最大类型包括int, 结果为int类型
System.out.println(num2+num3+num4);
}
}
一元运算
package operator;
public class Dome04 {
public static void main(String[] args) {
// ++ -- 自增, 自减
int num1 = 3;
int num2 = num1++; // 执行完这行代码后,先给num2赋值, 再自增
// num1++ 相当于 num1 = num1 + 1
System.out.println(num1); // 结果为:4
System.out.println(num2); // 结果为:3
int num3 = 3;
int num4 = ++num3; // 执行完这行代码前,先自增, 再给num4赋值
// ++num3 相当于 num3 = num3 + 1
System.out.println(num3); // 结果为:4
System.out.println(num4); // 结果为:4
// 幂运行 2^3
double pow = Math.pow(2, 3);
System.out.println(pow);
}
}
关系运算符
package operator;
public class Demo03 {
public static void main(String[] args) {
// 关系运算符返回的结果: 布尔值
int num1 = 10;
int num2 = 20;
System.out.println(num1>num2); // 大于 结果:false
System.out.println(num1<num2); // 小于 结果:true
System.out.println(num1==num2); // 等于 结果:false
System.out.println(num1!=num2); // 不等于 结果:true
}
}
逻辑运算
package operator;
// 逻辑运行符
public class Demo05 {
public static void main(String[] args) {
// && 与 and, || 或 or, ! 非 取反
boolean a = true;
boolean b = false;
// 两个变量都为真, 结果为true
System.out.println("a && b"+(a && b));
// 两个变量有一个为真, 结果为true
System.out.println("a || b"+(a || b));
// 如果比较为真,结果为假,反之比较为假,结果为true
System.out.println("!(a && b)"+!(a && b));
// 短信运算
int c = 5;
boolean d = (c<4)&&(c++<4); // false
System.out.println(d);
System.out.println(c); // 结果:5, 使用&&时前面为假后面就不会执行
}
}
位运算
package operator;
public class Demo06 {
/*
A = 0011 1100
B = 0000 1101
A&B 0000 1100 有2个都为就为真
A|B 0011 1101 有1个为真就为真
A^B 0011 0011 不同为真,相同为假
~B 1111 0010 相同为假,不同为真
*/
public static void main(String[] args) {
/*
向左移位 <<
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
*/
// 2*8 =16 拆分 2*2*2*2 向左移位3次
System.out.println(2<<3);
System.out.println(16>>3);
}
}
条件运算
package operator;
public class Demo08 {
public static void main(String[] args) {
// x ? y : z
// 如果x==true,则结果为y, 否则结果为z
int score = 80;
// 不建议这么写,可以使用if判断,但必须掌握
String type = score < 60 ? "不及格":"及格";
System.out.println(type);
}
}
包机制
- 为了更好地组织类, Java提供了包机制, 用于区别类名的命名空间
- 一般利用公司域名倒置作为包名
- 为了能够使用某一个包的成员, 我们需要在Java程序中明确导入该包, 使用"import"语句可以完成功能
Java文档
参数信息
- @author 使用名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回情况
- @throws 异常抛出情况
文档实例
package com.kuangstudy.doc;
/**
* @author kuang
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/**
* @author kuang
* @version 1.0
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
生成文档
终端中找开文件路径
文档--右键--Open ln--Terminal
javadoc命令生成所需的文件
-encoding UTF-8 -charset UTF-8 转换字符和设置字符集为UTF-8
PS D:\ITOM\java\kuangstudy\project\src\com\kuangstudy\doc> javadoc.exe -encoding UTF-8 -charset UTF-8 Doc.java
PS D:\ITOM\java\kuangstudy\project\src\com\kuangstudy\doc> ls
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/10/19 17:09 com
-a---- 2022/10/19 17:09 724 allclasses-frame.html
-a---- 2022/10/19 17:09 704 allclasses-noframe.html
-a---- 2022/10/19 17:09 3698 constant-values.html
-a---- 2022/10/19 17:09 3685 deprecated-list.html
-a---- 2022/10/19 16:59 346 Doc.java
-a---- 2022/10/19 17:09 7799 help-doc.html
-a---- 2022/10/19 17:09 4776 index-all.html
-a---- 2022/10/19 17:09 2893 index.html
-a---- 2022/10/19 17:09 4126 overview-tree.html
-a---- 2022/10/19 17:09 20 package-list
-a---- 2022/10/19 17:09 857 script.js
-a---- 2022/10/19 17:09 13416 stylesheet.css
访问文档的主页
PS D:\ITOM\java\kuangstudy\project\src\com\kuangstudy\doc> 360se.exe .\index.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?