书写注释是一个很好的习惯
单行注释
多行注释
文档注释
public class Main {
public static void main(String[] args) {
// 这是单行注释
System.out.print("Hello! world");
/*
这是多行注释
这是多行注释
*/
/*
* ii. ;9ABH,
* SA391, .r9GG35&G
* ii13Gh; i3X31i;:,rB1
* iMs,:,i5895, .5G91:,:;:s1:8A
* 33::::,,;5G5, ,58Si,,:::,sHX;iH1
* Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG
* .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8
* :SB9s:,............................,,,.,,,SASh53h,1G.
* .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX,
* ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi
* i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1
* 59;.....,. .,,,,,,,,,,,... .............,..:1;.:&s
* s8,..;53S5S3s. .,,,,,,,.,.. i15S5h1:.........,,,..,,:99
* 93.:39s:rSGB@A; ..,,,,..... .SG3hhh9G&BGi..,,,,,,,,,,,,.,83
* G5.G8 9#@@@@@X. .,,,,,,..... iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh
* Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX:
* ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M; ....,,,,,,,,S8
* X3 iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs ...,,,,,,,:Gs
* r8, ,,,...,,,,,,,,,,..... ,h8XABMMHX3r. .,,,,,,,.rX:
* :9, . .:,..,:;;;::,.,,,,,.. .,,. ..,,,,,,.59
* .Si ,:.i8HBMMMMMB&5,.... . .,,,,,.sMr
* SS :: h@@@@@@@@@@#; . ... . ..,,,,iM5
* 91 . ;:.,1&@@@@@@MXs. . .,,:,:&S
* hS .... .:;,,,i3MMS1;..,..... . . ... ..,:,.99
* ,8; ..... .,:,..,8Ms:;,,,... .,::.83
* s&: .... .sS553B@@HX3s;,. .,;13h. .:::&1
* SXr . ...;s3G99XA&X88Shss11155hi. ,;:h&,
* iH8: . .. ,;iiii;,::,,,,,. .;irHA
* ,8X5; . ....... ,;iihS8Gi
* 1831, .,;irrrrrs&@
* ;5A8r. .:;iiiiirrss1H
* :X@H3s....... .,:;iii;iiiiirsrh
* r#h:;,...,,.. .,,:;;;;;:::,... .:;;;;;;iiiirrss1
* ,M8 ..,....,.....,,::::::,,... . .,;;;iiiiiirss11h
* 8B;.,,,,,,,.,..... . .. .:;;;;iirrsss111h
* i@5,:::,,,,,,,,.... . . .:::;;;;;irrrss111111
* 9Bi,:,,,,...... ..r91;;;;;iirrsss1ss1111
*/
// 这是文档注释
/**
* @deprecated
*
*/
}
}
Java中的类名、变量名、方法名都被称为标识符。
所有的标识符都应该以字母、美元符、或者下划线开始。
不能使用关键字作为变量名或者方法名。
标识符是大小写敏感的。
Java是强类型语言,所有的变量必须先定义后使用。(安全性高)
Java的数据类型:
基本类型分为数值类型和boolean
类型,数值类型又分为整数类型、浮点类型和字符类型。
public class Demo2 {
public static void main(String[] args) {
// 八大基本数据类型
// 整数
// int 最常用
int num1 = 10;
byte num2 = 100;
short num3 = 200;
// long 类型要在数字后面加L
long num4 = 300L;
// 浮点数(小数)
// float 类型要在数字后面加F
float num5 = 10.1F;
double num6 = 3.14159265;
// 字符类型
char name = '刘';
// 字符串,String 不是关键词,是一个类
// String name1 = "刘同学";
// 布尔值: 是非
boolean flag = true;
boolean flag1 = false;
}
}
引用数据类型包括类、接口、数组。
位(bit):是计算机内部数据储存的最小单位。
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。
1B(byte,字节) = 8bit(位)
字符:是指计算机中使用的字母、数字、字和符号。
整数部分的拓展主要是进制,
二进制数前缀0b;
八进制数前缀0;
十六进制数前缀0x;
浮点数这里主要是涉及到金融或者银行之类的业务,不要使用float进行比较等操作,要使用Java中的BigDecimal
数学工具类。
这里的话所有的字符本质还是数字,字符可以通过强制类型转换转换成为数字;
转义字符有很多,这里有两个常见常用的:\t
和\n
。
\t
是制表符;\n
是换行符;
下面这段代码演示了上面这些拓展部分。
public class Demo3 {
public static void main(String[] args) {
/*
整数拓展:进制
二进制:0b
十进制
八进制:0
十六进制:0x
*/
int i = 10;
// 八进制
int i1 = 010;
// 十六进制0x
int i2 = 0x10;
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
System.out.println("==========分割线==========");
/*
浮点数之间比较避免使用 float
如遇到银行业务
使用 BigDecimal 数学工具类
*/
/*
字符拓展
所有的字符本质还是数字
编码 Unicode 0——65536
*/
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println(c2);
// 强制类型转换
System.out.println((int)c1);
System.out.println((int)c2);
// Unicode 编码:u0000--uFFFF
// '\u0061' 就是 a
char c3 = '\u0061';
System.out.println(c3);
System.out.println("==========分割线==========");
/*
转义字符:
\t 制表符
\n 换行符
...还有很多
*/
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
}
}
由于Java是强类型语言,所以要进行有些运算时,需要用到类型转换。
运算中,不同类型的数据先转换为同一类型,然后进行运算。
public class Demo4 {
public static void main(String[] args) {
int i = 128;
// 强制类型转换 (类型)变量名 高--低
// 内存溢出
byte b = (byte) i;
System.out.println(i);
System.out.println(b);
}
}
结果:
public class Demo4 {
public static void main(String[] args) {
int i = 128;
// 自动类型转换 低--高
double b = i;
System.out.println(i);
System.out.println(b);
}
}
运行结果:
注意:
public class Demo4 {
public static void main(String[] args) {
/*
注意:
1.不能对布尔值进行类型转换
2.不能把对象类型转换为不相干的类型
3.高容量转换成低容量时,强制转换
4.转换的时候可能存在内存溢出或者精度问题
*/
System.out.println((int)23.2);
System.out.println((int)-23.3f);
System.out.println("==========分割线==========");
char c = 'a';
// a 下一个字母是 b
int d = c + 1;
System.out.println(d);
System.out.println((char) d);
}
}
运行结果:
操作比较大的数时要注意溢出问题
public class Demo5 {
public static void main(String[] args) {
// 操作比较大的数的时候,注意溢出问题
// 较大数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
// -1474836480 , 计算结果溢出
int total = money * years;
// 默认是int, 转换之前已经存在问题了
long total2 = money * years;
System.out.println(total2);
}
}
变量顾名思义就是可以变换的量
Java是强类型语言,每个变量必须声明其类型;类型可以是基本类型也可以是引用类型;
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域;
变量名必须是合法的标识符。
变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
2023年8月14日修改:
我发现JavaGuide的分类方式很好,简单的将变量分为成员变量和局部变量,其中成员变量包含类变量和实例变量,这里引用一下Guide哥的内容:
成员变量与局部变量的区别?
成员变量 vs 局部变量
- 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被
public
,private
,static
等修饰符所修饰,而局部变量不能被访问控制修饰符及static
所修饰;但是,成员变量和局部变量都能被final
所修饰。- 存储方式:从变量在内存中的存储方式来看,**如果成员变量是使用
static
修饰的,那么这个成员变量是属于类的,如果没有使用static
修饰,这个成员变量是属于实例的。**而对象存在于堆内存,局部变量则存在于栈内存。- 生存时间:从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
- 默认值:从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被
final
修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
著作权归Guide所有 原文链接:https://javaguide.cn/java/basis/java-basic-questions-01.html#%E5%8F%98%E9%87%8F
2023年8月14日修改:
今天复习时发现关于类变量和静态变量的内容有点模糊,冲浪了一番后最后在这里引用一下 JavaGuide 的内容,这个网站很好用,适合我们准备面试查缺补漏~
静态变量有什么作用?
静态变量也就是被
static
关键字修饰的变量。==它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。==也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。静态变量是通过类名来访问的,例如
StaticVariableExample.staticVar
(如果被private
关键字修饰就无法这样访问了)。
著作权归Guide所有 原文链接:https://javaguide.cn/java/basis/java-basic-questions-01.html#%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F%E4%B8%8E%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E7%9A%84%E5%8C%BA%E5%88%AB
public class Demo6 {
/**
* 类变量 static 从属于类
*/
static double salary = 2000;
/**
* 实例变量:从属于对象,如果不自行初始化,默认值为该变量类型的默认值
* 整数:0 小数:0.0
* 布尔值:false
* 除了基本类型,其余的默认值都是null
*/
String name;
int age;
// main方法
public static void main(String[] args) {
// 局部变量:必须声明和初始化值
int i = 10;
System.out.println(i);
// 实例变量:变量类型 变量名 = new Demo6();
Demo6 demo6 = new Demo6();
System.out.println(demo6.age);
System.out.println(demo6.name);
// 类变量
System.out.println(salary);
}
}
运行结果:
2023年8月14日修改:
实例对象属于类的每个实例(对象),必须通过实例名来访问,而不可能通过类名来访问。
作用域是整个类,生命周期与实例的创建和销毁同步。
public class Demo6 {
/**
实例变量:从属于对象,如果不自行初始化,默认值为该变量类型的默认值
整数:0 小数:0.0
布尔值:false
除了基本类型,其余的默认值都是null
*/
String name;
int age;
// main方法
public static void main(String[] args) {
// 局部变量:必须声明和初始化值
int i = 10;
System.out.println(i);
// 实例变量:变量类型 变量名 = new Demo6();
Demo6 demo6 = new Demo6();
System.out.println(demo6.age);
System.out.println(demo6.name);
}
}
运行结果:
只存在于局部变量所在作用域,不在作用域内无法使用。
public class Demo6 {
public static void main(String[] args) {
// 局部变量:必须声明和初始化值
int i = 10;
System.out.println(i);
}
}
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MwSyDCTn-1683442738861)(C:\Users\刘嘉奇\AppData\Roaming\Typora\typora-user-images\image-20230501144930113.png)]
常量初始化后不能再改变值,可以理解为一种特殊的变量,它的值被设定后,在程序运行过程中不会改变。
final 常量名 = 常量值
常量值一般使用大写字母。
public class Demo7 {
/**
* static 修饰符可以和final顺序互换,不分前后。
*/
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
lastName
reverseWord()
MAX_VALUE
;ReverseWord
package Operator;
public class Demo01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
int d = 40;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / (double) b);
}
}
运行结果:
package Operator;
public class Demo02 {
// 关系运算符返回结果为布尔类型
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);
}
}
运行结果:
package Operator;
public class Demo03 {
public static void main(String[] args) {
// 自增 ++,自减--;属于一元运算符
int a = 3;
// 先将a赋值给b,然后自增
int b = a++;
System.out.println(b);
System.out.println(a);
}
}
运行结果:
package Operator;
public class Demo03 {
public static void main(String[] args) {
// 自增 ++,自减--;属于一元运算符
int a = 3;
// a先自增,然后将a赋值给b
int b = ++a;
System.out.println(b);
System.out.println(a);
}
}
运行结果:
自减同理
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: " + (b && a));
// 逻辑或运算,两个变量有一个为真则结果为true
System.out.println("a || b:" + (a || b));
// 如果结果为真则变为假,如果结果为假则变为真
System.out.println("a && b:" + !(a && b));
}
}
运行结果:
public class Demo06 {
public static void main(String[] args) {
System.out.println(2<<3);
}
}
运行结果:16
对这段代码的解释:
位运算:
A = 0011 1100
B = 0000 1101
A%B = 0000 1100
A|B = 0000 1101
A^B = 0011 0001
~B = 1111 0010
2*8 =16 2*2*2*2
底层二进制效率很高
<< 左移相当于 *2
>> 右移相当于 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
// a = a + b
a += b;
// a = a - b
a -= b;
System.out.println(a);
}
}
运行结果:
30
10
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
/*
字符串连接符:+ ,+前面出现字符串String类型,
则将后面转换成字符串进行拼接
*/
System.out.println("" + a + b);
System.out.println(a + b +"");
}
}
运行结果:
1020
30
字符串若出现在 ‘+’ 后面则正常运算,不进行拼接操作。
public class Demo08 {
// 三元运算符
public static void main(String[] args) {
// x ? y : z
// 如果 x == ture,则结果为y,否则为z
int score = 50;
String type = score > 60 ? "及格" : "不及格";
System.out.println(type);
}
}
运行结果:
不及格
使用()来提高运算符的优先级。
为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。起到文件夹的作用。
包里面的名字不要重复。
一般利用公司域名倒置作为包名。
.*
通配符,将指定包内所有内容全部选中。
格式:import package1[.package2...].(classname | *);
javadoc命令是用来生成自己的API文档的。
JDK17官方API文档:Overview (Java SE 17 & JDK 17) (oracle.com)
文档参数信息:
以上便是Java基础的部分,内容是大概内容,有待补充,谨以此记录学习Java的历程。
我是看B站——遇见狂神说的视频学习并且记录的,推荐!!
【狂神说Java】Java零基础学习视频通俗易懂https://www.bilibili.com/video/BV12J41137hu?p=32&vd_source=8300a0492d5aa37df2a5bc0bf5efc0d2