JAVA学习知识大全
常用的DOS命令
-exit 退出当前DOS命令窗口
-dir 列出当前目录下所有的子文件/子目录
-cd 切换目录
-cd . . 回到上级目录
-cd \ 直接回到根目录
怎么切换盘符:
(盘符名): 回车
e: 回车
JAVA前言
JAVA语言特性
*简单性(屏蔽指针)
*面向对象
*可移植性: JAVA程序可以做到一次编译,到处运行。也就是说JAVA程序可以在windows操作系统上运行,不作任何修改,同样的java程序可以直接放到Linux操作系统上运行,这个被称作为Java程序的可移植性,或者叫做跨平台。
*多线程:
*健壮性:和自动垃圾回收机制有关,自动垃圾回收机制简称GC机制。JAVA语言运行过程中产生的垃圾是自动回收的,不需要程序员关心。
*安全性
JAVA的编译阶段
编译阶段主要的任务是检查Java源程序(.java)是否符合Java语法,符合Java语法则能够生成正常的字节码文件(xxx.class文件),不符合Java语法规则则无法生成字节码文件。
字节码文件中不是纯粹的二进制,这种文件无法在操作系统当中直接执行。
编译阶段的过程:
程序员需要在硬盘的某个位置(位置随意)新建一个.java扩展名的文件,该文件被称为Java源文件,源文件当中编写的是Java源代码/源程序。而这个源程序是不能随意编写,必须符合Java语法规则(Java语法规则需要记忆)。
Java程序员需要使用JDK当中自带的javac.exe命令进行Java程序的编译。
javac的使用规则:javac java源文件的路径
javac是一个java编译器工具/命令,在DOS命令窗口中使用。
一个java源文件可以编译生成多个.class文件。
例子:
主要是用javac java源文件的路径(绝对路径和相对路径,下面用绝对路径)
未编译前
编译之后生成.class文件,其中绝对路径可以直接从文件夹中拖到DOS窗口中
JAVA的运行阶段
JDK安装之后,除了自带一个javac.exe之外,还有另外一个工具/命令,叫做java.exe
java.exe命令主要负责运行阶段
java.exe在DOS窗口中使用
Java的使用规则:
- java 类名
例如:
硬盘上有一个A.class,那么就这样用:java A
千万要注意:不要写成这样:java A.class【这种方式是错误的】
运行阶段的过程
- 打开DOS命令窗口(将DOS窗口中的目录切换到xxx.class文件所在目录)
- 输入:java A
- java.exe命令会启动Java虚拟机(JVM),JVM会启动类加载器ClassLoader
- ClassLoader会去硬盘上搜索A.class文件,找到该文件则将该字节码文件装载到JVM当中。
- JVM将A.class字节码文件解释成二进制1010101010这样的数据。
- 然后操作系统执行二进制和底层硬件平台进行交互。
java 类名 要注意的是,先将DOS窗口中的目录切换到xxx.class文件所在目录
JDK 16的安装教程
见网页 https://blog.csdn.net/weixin_43452424/article/details/115283651
JAVA注释
单行注释
// 单行注释,只注释当前行
多行注释
/*
多行注释
多行注释
多行注释
…
*/
javadoc 注释
/**
*多行注释
*多行注释
*多行注释
*多行注释
*多行注释
*多行注释
…
*/
该注释是比较专业的注释,注释信息会被javadoc.exe工具解析提取并生成帮助文档。
public class和class的区别
- 一个java源文件当中可以定义多个class
- 一个java源文件当中public的class不是必须的
- 一个class会定义生成一个xxx.class字节码文件
class B
{
public static void main(String[] args){
System.out.println("B's main method");
}
}
class X
{
public static void main(String[] args){
System.out.println("X's main method");
}
}
class Y
{
public static void main(String[] args){
System.out.println("Y's main method");
}
}
class Z
{
public static void main(String[] args){
System.out.println("Z's main method");
}
}
public class k
{
public static void main(String[] args){
System.out.println("k's main method");
}
}
编译阶段
运行后
- 一个java源文件当中定义公开的类的话,公开的类只能有一个,并且该类的名称必须和java源文件名称一致
- 每一个class当中都可以编写main方法,都可以设定程序的入口,想执行B.class中的main方法:java B,想执行x.class当中的main方法:java x
- 注意:当在命令窗口中执行java Hello,那么要求Hello.class当中必须有主方法。没有主方法会出现运行阶段的错误。
class B
{
/*
public static void main(String[] args){
System.out.println("B's main method");
}
*/
}
错误提示:
JAVA基础知识
标识符
1、什么是标识符?
-在java源程序当中凡是程序员有权利自己命名的单词都是标识符。
-标识符在EditPlus编辑器当中以黑色字体高亮显示。
-标识符可以标识什么元素呢?
* 类名
* 方法名
* 变量名
* 接口名
* 常量名
...
2、标识符的命名规则?【不按照这个规则,编译器会报错】
* 只能由“数字、字母、下划线_、美元符号$”组成,不能含有其它符号
* 不能数字开头
* 严格区分大小写
* 关键字不能做标识符
* 理论上无长度限制,但是最好不要太长
3、标识符的命名规范?【只是一种规范,不属于语法,不遵守规范编译器不会报错】
* 最好见名知意
public class UserService{
public void login(String uaername, String password){
}
}
* 遵守驼峰命名方式
SystemService
UserService
CustomerService
* 类名、接口名:首字母大写,后面每个单词首字母大写
* 变量名、方法名:首字母小写,后面每个单词首字母大写
* 常量名:全部大写
/*
关于java语言当中的标识符
1、什么是标识符?
-在java源程序当中凡是程序员有权利自己命名的单词都是标识符。
-标识符在EditPlus编辑器当中以黑色字体高亮显示。
-标识符可以标识什么元素呢?
* 类名
* 方法名
* 变量名
* 接口名
* 常量名
...
2、标识符的命名规则?【不按照这个规则,编译器会报错】
* 只能由“数字、字母、下划线_、美元符号$”组成,不能含有其它符号
* 不能数字开头
* 严格区分大小写
* 关键字不能做标识符
* 理论上无长度限制,但是最好不要太长
3、标识符的命名规范?【只是一种规范,不属于语法,不遵守规范编译器不会报错】
* 最好见名知意
public class UserService{
public void login(String uaername, String password){
}
}
* 遵守驼峰命名方式
SystemService
UserService
CustomerService
* 类名、接口名:首字母大写,后面每个单词首字母大写
* 变量名、方法名:首字母小写,后面每个单词首字母大写
* 常量名:全部大写
*/
public class IdentifierTest01 //IdentifierTest01是一个类名,名字可以修改
{
//main是一个方法名
public static void main(String[] args){ //args是一个变量名
}
}
关键字
-
关键字在java语言当中全部小写
-
关键字在EditPlus工具中颜色是蓝色高亮
-
常见的关键字有哪些?
public
calss
static
void
if
for
while
do
default
byte
short
int
long
float
double
boolean
char
private
protected
switch
true
false
throw
try
catch
…
-
/*
* 关键字在java语言当中全部小写
* 关键字在EditPlus工具中颜色是蓝色高亮
* 常见的关键字有哪些?
public
calss
static
void
if
for
while
do
default
byte
short
int
long
float
double
boolean
char
private
protected
switch
true
false
throw
try
catch
....
*/
public class KeyWordsTest01
{
public static void main(String[] args){
}
}
字面值
- 字面值:
- 10、100
- 3.14
- “abc”
- ‘a’
- true、false
* 字面值就是数据
* 字面值是java源程序的组成部分之一,包括标识符和关键字,它们都是java源程序的组成部分
* 注意:
java语言当中所有的字符串型字面值必须使用双引号括起来," "
java语言当中所有的字符型字面值必须使用单引号括起来,’ ’
public class ConstTest01
{
public static void main(String[] args){
System.out.println("abc");
System.out.println("最近你过得还好吗?");
System.out.println('b');
System.out.println(10);
System.out.println(false);
System.out.println(true);
}
}
变量
关于java语言当中的变量:
1、什么是变量?
* 变量本质上来说是内存中的一块空间,这块空间"有数据类型"、"有名字"、"有字面值"
* 变量包含三部分:数据类型、名称、字面值【数据】
* 变量是内存中存储数据的最基本的单元
2、数据类型的作用
* 不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间
* 数据类型是指导程序在运行阶段应该分配多大的内存空间
3、变量要求:变量中存储的具体的"数据"必须和变量的"数据类型"一致,当不一致的时候编译报错
4、声明/定义变量的语法格式:
数据类型 变量名;
5、变量声明之后怎么赋值?
语法格式:
变量名 = 字面值;
要求:字面值的数据类型必须和变量的数据类型一致
= 等号是一个赋值运算符,赋值运算符先运算等号右边的表达式,表达式
执行结束之后的结果赋值给左边的变量
6、声明和赋值可以放到一起完成
int i = 10;
7、变量赋值之后,可以重新赋值,变量的值可以变化
int i = 10;
System.out.println(i); // 10
i = 20;
System.out.println(i); // 20
i = 100;
System.out.println(i); // 100
8、有了变量的概念之后,内存空间得到了重复的使用:
int i = 10;
System.out.println(i);
...
...
System.out.println(i);
9、通常访问一个变量包括两种访问形式:
* 第一种:读取变量中保存的具体数据 get/读取
* 第二种:修改变量中保存的具体数据 set/设置
i = 20; // set
System.out.println(i); // get
10、变量在一行上可以声明多个
int a,b,c;
11、java中变量必须先声明,在赋值,才能访问
int i; 程序执行到这里,内存空间并没有
开辟出来,变量i并没有初始化。所以没有赋值之前是无法访问的
12、在方法体当中的java代码,是遵守自上而下的顺序依次执行的,逐行执行
第一行;
第二行;
第三行;
特点:第二行的代码必须完整的结束之后,第三行程序才能执行
13、在同一个"作用域"当中,变量名不能重名,但是变量可以重新赋值
14、什么是作用域?
变量的作用域,其实描述的就是变量的有效范围
在什么范围之内是可以被访问的,只要出了这个范围该变量就无法访问了
15、变量的作用域只要记住一句话:
出了大括号就不认识了
16、根据变量声明的位置来分类:
* 局部变量
- 在方法体中声明的变量叫做局部变量
* 成员变量
- 在方法体外【类体之内】声明的变量叫做成员变量
在不同的作用域当中,变量名是可以相同的
在同一个作用域当中,变量名不能重名
public class VarTest01
{
public static void main(String[] args){
//声明一个int类型的变量,起名i
int i;
// 编译报错:变量i并没有初始化
//System.out.println(i);
//给i变量赋值,i变量在这里完成初始化,内存开辟
i = 100;
System.out.println(i);
//i再次重新赋值
i = 200;
System.out.println(i);
//一行上可以同时声明多个变量
//a和b尚未初始化,c赋值300
int a,b,c=300;
//编译错误
//System.out.println(a);
//编译错误
//System.out.println(b);
System.out.println(c);
a = 0;
b = 1;
System.out.println(a);
System.out.println(b);
}
}
public class VarTest02
{
public static void main(String[] args){
int i = 100;
//System.out.println(i); //100
//i = 200;
//System.out.println(i); //200
//以下代码顺序有误,先声明然后赋值再访问
/*
System.out.println(k);
int k = 100;
*/
/* 编译阶段生错误
int i = 90;
System.out.println(i);
*/
}
}
public class VarTest03
{
//注意:这里的static不要去掉
static int k = 90;
public static void main(String[] args){
//变量i的作用域是main方法
//在整个main方法当中是有效的,可见的,可以访问的
int i = 100;
//以下会编写一个for循环语句
for(int a = 0; a < 10; a++){//a变量的作用域是整个for循环,for循环结束之后,a变量的内存就释放了
}
//这里无法访问a变量
//System.out.println(a);
int j; // 作用域是整个main方法
for (j = 0; j < 10; j++ ){
}
System.out.println(j); // 访问的是main方法中的j变量
}
public static void doSome(){
//这里无法访问main方法当中的变量i
//已经出了i变量的作用域
//System.out.println(i);
System.out.println(k);
}
}
public class VarTest03
{
//注意:这里的static不要去掉
static int k = 90;
public static void main(String[] args){
//变量i的作用域是main方法
//在整个main方法当中是有效的,可见的,可以访问的
int i = 100;
//以下会编写一个for循环语句
for(int a = 0; a < 10; a++){//a变量的作用域是整个for循环,for循环结束之后,a变量的内存就释放了
}
//这里无法访问a变量,编译阶段发生错误
//System.out.println(a);
int j; // 作用域是整个main方法
for (j = 0; j < 10; j++ ){
}
System.out.println(j); // 访问的是main方法中的j变量
}
public static void doSome(){
//这里无法访问main方法当中的变量i
//已经出了i变量的作用域
//System.out.println(i);
System.out.println(k);
}
}
public class VarTest04
{
//成员变量
int k = 200;
//主方法:入口
public static void main(String[] args){
// 局部变量
int i = 3;
//java遵循"就近原则"
System.out.println(i);
}
//成员变量
int i = 100; // 声明变量
//类体中不能直接编写java语句【除声明变量之外】
//System.out.println(i);
//doSome方法
public static doSome(){
//局部变量
int i = 90;
}
}
数据类型
关于java中的数据类型:
1、数据类型的作用是什么?
程序当中有很多数据,每一个数据都是有相关类型的,不同数据类型的数据占用空间大小不同。
数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间。
2、java中的数据类型包括两种:
* 基本数据类型
* 引用数据类型
- 类
- 接口
- 数组
...
3、关于基本数据类型:
*基本数据类型包括四大类、八小种:
第一类:整数型
byte, short, int, long
第二类:浮点型
float, double
第三类:布尔型
boolean
第四类:字符型
char
4、字符串"abc"不属于基本数据类型,属于"引用数据类型",字符属于基本数据类型:
* 字符串使用双引号 "abc"
* 字符使用单引号 'a'
5、八种基本数据类型各自占用空间大小是多少?
基本数据类型 占用空间大小【单位:字节】 取值范围
--------------------------------------------------------------------
byte 1 [-128-127]
short 2 [-32768-32767]
int 4 [-2147483648-2147483647]
long 8
float 4
double 8
boolean 1 [true,false]
char 2 [0-65535]
6、字节(Byte):
1 Byte = 8 bit [1个字节 = 8个比特位] 1个比特位表示一个二进制位:1/0
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
7、关于八种基本数据类型的默认值
数据类型 默认值
--------------------------------------
byte,short,int,long 0
float,double 0.0
boolean false
char \u0000
8、以下java程序主要讲解的是数据类型之:char类型
9、关于java语言当中的char类型:
转义字符 \:
\n 换行符
\t 制表符
\\ 反斜杠字符
转义字符出现在特殊字符之前,会将特殊字符转换成普通字符
10、java语言当中的"整数型字面值"被默认当做int类型来处理。要让
这个"整数型字面值"被当做long类型来处理的话,需要将"整数型字面值"
后面添加l/L,建议使用大写的L
11、java语言当中的整数型字面值有三种表示方式:
第一种方式:十进制【是一种缺省默认的方式】常用
第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
12、大容量转换成小容量,需要进行强制类型转换
强制类型转换需要加"强制类型转换符" (数据类型)
加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度
所以强制类型转换谨慎使用,因为损失精度之后可能损失很严重
13、在java语言中,所有的浮点型字面值,默认被当做double类型来处理,
要想该字面值当做float类型来处理,需要在字面值后面添加F/f
14、在java语言当中boolean类型只有两个值:true,false,没有其他值
不像在c语言中,0和1可以表示假和真
在底层存储的时候boolean类型占用一个字节,因为实际存储的时候false底层是0,true底层是1
15、基本数据类型之间的转换规则:
1)八种基本数据类型当中除布尔类型之外剩下的7种类型之间都可以互相转换
2)小容量向大容量转换,称为自动转换,容量从小到大排序:
byte < short < int < long < float < double
char <
注:
任何浮点类型不管占用多少个字节,都比整数型容量大
char和short可表示的种类数量相同,但是char可以取更大的正整数
3)大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在
运行阶段可能会损失精度,所以要谨慎使用
4)当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量
5)byte,short,char混合运算的时候,各自先转换成int类型在做运算
6)多种数据类型混合运算,先转换成容量最大的那种类型再做运算
public class DataTypeTest01
{
//这里的static必须加
//static int k = 1000;
//变量还是遵守这个语法:必须先声明,在赋值,才能访问
//成员变量没有手动赋值之前系统会默认赋值【局部变量不会】
//static int f; //成员变量
public static void main(String[] args){
//普通的n字符
char c1 = 'n';
System.out.println(c1);
char c2 = '\n'; // '\n'是换行符
System.out.println(c2);
//System.out.println()和System.out.print()区别:
// println输出之后换行,print表示输出,但是不换行
//System.out.print("Hello");
//System.out.println("World!");
//打印出来是:
//Hello
//world
//System.out.println("Hello \nWorld!");
//定义一个char类型的变量,起名为c,同时赋值字符'a'
//char c = 'a';
//System.out.println(c);
//一个中文占用2个字节,char类型正好是2个字节
//所以java中的char类型变量可以存储一个中文字符
//char x = '国';
//System.out.println(x);
//编译错误
//ab是字符串不能使用单引号括起来
//char y = 'ab';
//"a"是字符串类型
//k变量是char类型
//类型不兼容,编译错误
//char k = "a";
//声明
//char e;
//赋值
//e = 'e';
//System.out.println(e);
//再次赋值
//e = 'f';
//System.out.println(e);
/*
int i;
System.out.println(i);
*/
//System.out.println(k);
//System.out.println(f); // 0
//456整数型字面值被当做int类型,占用4个字节
//x变量在声明的时候是long类型,占用8个字节
//int类型的字面值456赋值给long类型的变量x,存在类型转换
//int类型转换成long类型
//int类型是小容量,long类型是大容量
//小容量可以自动转换成大容量,称为自动类型转换机制
long x = 456;
System.out.println(x);
//2147483647字面值是int类型,占用4个字节
//y是long类型,占用8个字节,自动类型转换
long y = 2147483647;
System.out.println(y);
//编译错误:过大的整数:2147483648
//2147483648被当做int类型4个字节处理,但是这个字面值超出int类型范围
//long z = 2147483648;
//System.out.println(z);
//解决错误
//2147483648字面值一上来就当做long类型来处理,在字面值后面添加L
//2147483648L是8个字节的long类型
//z是long类型变量,以下程序不存在类型转换
long z = 2147483648L;
System.out.println(z);
}
}