Java基础之超详细知识点汇总
本帖为系列帖,持续更新,旨在将Java小白们带上路,概念轻松解析,附带大量练习,图文并茂,供大家学习时参考,
好啦,废话不多说,Let’s Go! Rush Java 冲冲冲!
1. Java到底是个啥呐?
1.1 看看Java的所属吧
编程语言,人与计算机之间进行信息交流沟通的一种特殊语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
Java语言是美国Sun公司(Stanford University Network)在1995年推出的一门编程语言。
Java作者:詹姆斯·高斯林(James Gosling)
向祖师爷致以崇高的敬意!!!
1.2 Java发展历程
1995年,Sun推出了java
1996年,发布JDK1.0
1998年,发布JDK1.2,并将java分成了J2EE、J2SE、J2ME
J2SE:Java技术的核心和基础,是J2EE和J2ME的基础。
J2EE:java技术中应用最广泛的部分,提供了企业应用开发相关的完整解决方案。
J2ME:主要用于嵌入式消费电子,如机顶盒、移动电话、PDA的开发。
2009年,Sun公司被甲骨文公司收购。
2004年,发布JDK1.5,同时将JDK1.5改名为JavaSE5.0,J2EE、J2ME也相应改名为Java EE、Java ME。
2014年,发布JDK8。
1.3 Java语言应用在各个领域
网站领域、Android、大数据领域等。
1.4 Java是跨平台语言哦!
平台:CPU处理器与操作系统的整体叫平台,简单理解就是操作系统,如Windows、Mac、LInux
跨平台:一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。
Java程序并非是直接运行的,要经过先编译,后解释两个步骤。
先编译成与平台无关的字节码(.class文件),java虚拟机将字节码解释成特定平台的机器码并执行。只要为不同平台实现了相应的虚拟机,编译后的字节码就可以在该平台上运行。
JVM(java虚拟机)是java语言跨平台的关键部分。
1.5 Jvm、JRE和JDK三兄弟
JVM(Java Virtual Machine),Java虚拟机,是一个抽象的计算机,和实际计算机一样,负责解释执行字节码文件;
JRE(Java Runtime Environment),Java运行环境,是运行java程序的必需条件。包含了JVM和Java的核心类库(Java API);
JDK(Java Development Kit),Java标准开发包,包含了JRE和开发工具;
总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机。
1.6 JDK在哪下载,如何安装
下载
官网:https://www.oracle.com/
资料包中已经提供了安装包
安装
傻瓜式安装,一路下一步。
注意:安装路径不要包含中文或者空格等特殊字符。
1.7 JDK的目录详解
目录名称 | 说明 |
bin | 该路径下存放了JDK的各种工具命令。常用的javac和java就放在该路径下。 |
conf | 该路径下存放了JDK的相关配置文件。 |
include | 该路径下存放了一些平台特定的头文件。 |
jmods | 该路径下存放了JDK的各种模块。 |
legal | 该路径下存放了JDK各模块的授权文档。 |
lib | 该路径下存放了JDK工具的一些补充JAR包。 |
2. 演示人生中的第一个程序吧
2.1 先康康常用DOS命令
1.概念:磁盘操作系统。在接触集成开发环境之前,我们需要使用命令行窗口对java程序进行编译和运行,所以需要知道一些常用DOS命令。
2.打开方式:
win + r打开运行窗口,输入cmd,回车。
3.常用命令及其作用
2.2 学会配置Path环境变量
2.2.1 为什么配置环境变量
如果不配置环境变量,在使用javac和java时必须要进入到java安装目录的bin目录下,使用起来不太方便。
配置环境变量的作用就是可以在任意目录下使用javac和java。
2.2.2 配置环境变量步骤
参见《jdk安装及环境变量配置文档》文档。
环境变量流程图解
2.3 对世界说:“HelloWorld”
HelloWorld案例是指在计算机屏幕上输出“HelloWorld”这行文字。各种计算机语言都习惯使用该案例作为第一个演示案例。
2.3.1 Java程序开发运行流程
开发Java程序,需要三个步骤:编写程序,编译程序,运行程序。
2.3.2 HelloWorld案例的编写
新建一个HelloWorld.java文件,用记事本打开,键入如下内容
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
注意:
java程序源文件后缀必须是.java,不能是其他文件后缀名。
java程序源文件的文件名必须与public类的类名相同,因此,一个java源文件里最多只能定义一个public类。
大写小问题,java语言是严格区分大小写的语言 。
main方法问题,main方法必须使用public、static、void修饰。
2.3.3 HelloWorld案例的编译和运行
编译命令:javac 文件名.java
运行命令:java 文件名
2.4 推个好用的软件——Notepad++( 嗝~真香)
2.4.1 简介
Notepad++功能比 Windows中的记事本强大,除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码。Notepad++ 不仅有语法高亮显示,也有语法折叠功能,并且支持宏以及扩充基本功能的外挂模组。
2.4.2 安装及配置
傻瓜式安装(不会的话这真就说不过去了昂),一路下一步
3. 学习一下java的语法
3.1 请解释你的代码——注释
注释是对代码的解释和说明文字,可以提高程序的可读性。
程序注释是源代码的一个重要组成部分,对于一份规范的程序源代码而言,注释应该占到源代码的三分之一以上。
Java中的注释分为三种:
单行注释。
// 只能注释单行内容
多行注释。
/*
这里可以写
多行注释内容
*/
文档注释。文档注释以/**
开始,以*/
结束。通过javadoc工具可直接将源代码里文档注释提取成文档。
//这是定义了一个类,类名为Demo01,java中的代码都需要写在一个类中。
public class Demo01 {
/*
main是java程序的入口
也称为主方法。
*/
public static void main(String[] args){
//输出语句,""当中的内容会原样输出打印到控制台
System.out.println("注释");
}
}
/*
* ......................我佛慈悲......................
* _oo0oo_
* o8888888o
* 88" . "88
* (| -_- |)
* 0\ = /0
* ___/`---'\___
* .' \\| |// '.
* / \\||| : |||// \
* / _||||| -卍-|||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' |_/ |
* \ .-\__ '-' ___/-. /
* ___'. .' /--.--\ `. .'___
* ."" '< `.___\_<|>_/___.' >' "".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `_. \_ __\ /__ _/ .-` / /
* =====`-.____`.___ \_____/___.-`___.-'=====
* `=---='
*..................佛祖开光 ,永无BUG...................
*/
3.2 总得有雷打不动的标识——关键字
关键字:java语言中一些具有特殊含义的单词被称为关键字。
关键字的特点:
字母全小写。
关键字在高级编辑器中会高亮显示。
java一共有50个关键字,在工作中慢慢学习体会吧!
关键字 | 作 用 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
abstract | 表明类或者成员方法具有抽象属性 |
class | 类 |
extends | 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变 |
implements | 表明一个类实现了给定的接口 |
interface | 接口 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
synchronized | 表明一段代码需要同步执行 |
transient | 声明不用序列化的成员域 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
break | 提前跳出一个块 |
continue | 回到一个块的开始处 |
return | 从成员方法中返回数据 |
do | 用在do-while循环结构中 |
while | 用在循环结构中 |
if | 条件语句的引导词 |
else | 用在条件语句中,表明当条件不成立时的分支 |
for | 一种循环结构的引导词 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
switch | 分支语句结构的引导词 |
case | 用在switch语句之中,表示其中的一个分支 |
default | 默认,例如,用在switch语句中,表明一个默认的分支 |
try | 尝试一个可能抛出异常的程序块 |
catch | 用在异常处理中,用来捕捉异常 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
import | 表明要访问指定的类或包 |
package | 包 |
boolean | 基本数据类型之一,布尔类型 |
byte | 基本数据类型之一,字节类型 |
char | 基本数据类型之一,字符类型 |
double | 基本数据类型之一,双精度浮点数类型 |
float | 基本数据类型之一,单精度浮点数类型 |
int | 基本数据类型之一,整数类型 |
long | 基本数据类型之一,长整数类型 |
short | 基本数据类型之一,短整数类型 |
null | 空 |
true | 正确 |
false | 错误 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
this | 指向当前实例对象的引用 |
void | 声明当前成员方法没有返回值 |
goto | 保留关键字,没有具体含义 |
const | 保留关键字,没有具体含义 |
3.3 恒久远的数据——常量
常量:在程序运行过程中,其值不可以发生改变的量。
分类:
整数常量,例如:-99、0、99等
小数常量,例如:-9.9、9.0、99.99等
字符常量,用单引号括起来的一个字符,单引号当中只能是一个字符,不能没有字符,也不能有多个字符。
例如:‘a’、‘5’、‘B’、'中’等
字符串常量,用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、“abc”、"中国"等
布尔常量,表示真假,只有两个值true和false
空常量,一个特殊的值,空值,值为null
除空常量外,其他常量均可使用输出语句直接输出。
/*
分类
整数常量,例如:-99、0、99等
小数常量,例如:-9.9、9.0、99.99等
字符常量,用单引号括起来的一个字符,单引号当中只能是一个字符,不能没有字符,也不能有多个字符。例如:‘a'、'9'、'A'、'中'等
字符串常量,用双引号括起来的多个字符(可以包含0个、一个或多个),例如“a”、“java”、“程序员"等
布尔常量,表示真假,只能是true和false
空常量,一个特殊的值,空值,值为null
注意:除空常量外,其他常量均可使用输出语句直接输出。
*/
public class Demo02 {
public static void main(String[] args) {
//整数常量:
System.out.println(99);
System.out.println(-99);
System.out.println("========================");
//小数常量:
System.out.println(9.9);
System.out.println(-9.9);
System.out.println("========================");
//字符常量:
System.out.println('1');
System.out.println('b');
// System.out.println('java');//报错,不能有多个字符
System.out.println('');//报错,不能没有字符
System.out.println(' ');//不报错,输出一个空格字符
System.out.println("========================");
//字符串常量
System.out.println("java");
System.out.println("a");
System.out.println("");//可以没有字符
System.out.println("========================");
//布尔常量
System.out.println(true);
System.out.println(false);
//空常量
//System.out.println(null);//不可以输出
}
}
3.4 各具特色的数据格式——进制
进制:进位计数制,是人为定义的带进位的计数方法。例如10进制,就是逢十进一,用0-9这10个数字表示。
计算机中常用的进制:
十进制:Java中,数值默认都是10进制。
二进制:以0b开头,b大小写都可以。用0和1表示。
八进制:数值前面以0开头。用0-7这8个数表示。
十六进制:以0x开头,x大小写都可以。16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F16个大小不同的数,即逢16进1。
进制转换
十进制数据转成二进制数据:除基数(几进制)取余到排法
10进制转二进制
10进制转16进制
二进制数据转成十进制数据:使用8421编码的方式
二进制转十进制(8421):
10101 = 1*2^0 + 0*2^1 + 1*2^2 + 0*2^3 + 1*2^4
= 1 + 0 + 4 + 0 + 16
= 21
16进制转换为10进制
5a = 10* 16^0 + 5 * 16^1
= 10 + 80
= 90
二进制转换为八进制
将二进制数101110.101转换为八进制
得到结果:将101110.101转换为八进制为56.5
3.4 总得知道文件大小——计算机存储单元
我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,
通常用大写字母”B”表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位,其换算单位如下:
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
3.5 数据的长相——数据类型
概念:Java是一个强类型语言,Java中的数据必须明确数据类型。
分类:基本数据类型和引用数据类型
基本数据类型:
数据类型 | 关键字 | 内存占用 | 取值范围 |
整数类型 | byte | 1 | -128~127 |
short | 2 | -32768~32767 | |
int(默认) | 4 | -2的31次方到2的31次方-1 | |
long | 8 | -2的63次方到2的63次方-1 | |
浮点类型 | float | 4 | 负数:-3.402823E+38到-1.401298E-45 正数:1.401298E-45到3.402823E+38 |
double(默认) | 8 | 负数:-1.797693E+308到-4.9000000E-324 正数:4.9000000E-324 到1.797693E+308 | |
字符类型 | char | 2 | 0-65535 |
布尔类型 | boolean | 1 | true,false |
引用数据数据类型:类、接口、数组
3.6 千人千面——变量
3.6.1 变量概念
变量概念:在程序运行过程中,其值可以发生改变的量。
变量本质上是一小块内存空间。
编程的本质就是对内存中的数据访问和修改。程序所用的数据都会保存在内存中,程序员需要一种机制来访问或修改内存中的数据。这种机制就是变量,每个变量都代表了某一小块内存而且变量有名字的,程序对变量赋值,实际上就是把数据装入该变量所代表的的内存区的过程。程序读取变量的值,实际上就是从该变量所代表的内存区取值的过程。形象的理解,变量相当于一个有名字的容器,改容器用于装各种不同类型的数据。
3.6.2 变量的分类
3.6.3 变量的定义
数据类型 变量名 = 初始化值; // 声明变量并赋值
int a = 18; // 创建了一个变量
System.out.println(a);
// 先声明,后赋值(使用前赋值即可)
数据类型 变量名称; // 创建了一个变量
变量名称 = 数据值; // 赋值,将右边的数据值,赋值交给左边的变量
double b;
b = 55.5;
System.out.println(b);
还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。
int c = 10, d = 20; // 定义int类型的变量c和d,中间使用逗号隔开
System.out.println(c);
System.out.println(d);
3.6.4 变量的使用和修改
使用:
通过变量名访问即可。
//定义变量
int a = 10;
//输出变量
System.out.println(a);
修改:
//修改变量
a = 20;//再次为a赋值,原来的10就没有了,所以输出的是20
System.out.println(a);
3.6.5 使用变量时的注意事项
/*
使用变量的时候,有一些注意事项:
1. 在同一对花括号中,变量名不能重复。
2. 变量在使用之前,必须初始化(赋值)
3. 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
4.定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。
5. 如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。
6. 变量使用不能超过作用域的范围。
【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。
*/
public class Demo03 {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
//错误,变量的名字不可以相同。
//int a = 20;
//System.out.println(a);
//定义int类型的变量b,未赋值
int b;
//System.out.println(b);//错误的,没有值,不能使用
//long num = 9000000000;//90亿已经远远超过int类型的取值范围了
long num = 9000000000L;//9000000000L: long类型了
System.out.println(num);
//float f = 6.6;//错误的,6.6默认double类型,占8个字节,而左侧float占4个字节
float f = 6.6F;
System.out.println(f);
{
int num1 = 60;
System.out.println(num1); // 60
}
// int num1;
// System.out.println(num1); // 已经超出了大括号的范围,超出了作用域,变量不能再使用了
}
}
3.7 数据总得要变化格式——类型转换
在java程序中,不同的基本类型的值经常需要进行互相转换。为此java提供了两种类型转换方式,自动类型转换和强制类型转换。
自动类型转换:
把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的。
取值范围从大到小
注意:boolean类型不能与其他基本数据类型相互转换。
强制类型转换:
是按照 目标类型 变量名 = (目标类型)数据变量 这种转换规则进行转换的
强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
示例代码
/*
在java程序中,不同的基本类型的值经常需要进行互相转换。为此java提供了两种类型转换方式,自动类型转换和强制类型转换。
自动类型转换:
把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的。
强制类型转换:
是按照 目标类型 变量名 = (目标类型)数据变量 这种转换规则进行转换的
强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
*/
public class Demo04 {
public static void main(String[] args) {
//自动类型转换
long num = 3;//右:int类型(4个字节),左: long类型(8个字节)
System.out.println(num);
//强制类型转换
int a = 10;
int b = (int) a;
long a = 5000000000L;
int b = (int) a;
System.out.println(b);//705032704,强制类型转换有精度损失问题
}
}
表达式类型自动提升
当一个算数表达式中包含多个基本 类型数值时,整个算数表达式的数据类型会发生自动提升。自动提升的规则为
byte、short、char 运算时直接提升为int 。
整个算数表达式的数据类型会和操作数中数据取值范围大的数据类型保持一致。
/*
当一个算数表达式中包含多个基本类型数值时,整个算数表达式数据类型会发生自动提升。
规则:
byte、short、char 运算时直接提升为int 。
整个算数表达式的数据类型会和操作数中数据取值范围大的数据类型保持一致
*/
public class Demo05 {
public static void main(String[] args) {
byte a = 10;
//byte b = a + 100;//编译报错,byte在参与算术元素会先转换为int,a+100结果为int类型不能直接赋值给byte类型
byte b = (byte) (a + 100);
System.out.println(b);
double c = 10.0;
//float d = c + 1;//编译报错,整个表达式的数据类型和c保持一致,c+1的结果是double类型,不能直接赋值给float类型
double d = c + 1;
float f = (float) (c + 1);
System.out.println(d);
System.out.println(f);
}
}
转换原理图
自动类型转换
强制类型转换
自动类型提升规则
3.8 标识符
标识符:用于给程序中变量、类、方法命名的符号。
规则:
由字母、数字、下划线“_”、美元符号“$”组成,数字不能开头。
不能使用java中的关键字作为标识符。
标识符对大小写敏感(区分大小写)。
Java中标识符的命名约定:
小驼峰式命名:变量名、方法名
首字母小写,从第二个单词开始每个单词的首字母大写。
大驼峰式命名:类名
每个单词的首字母都大写。
另外,标识符的命名最好可以做到见名知意
例如:username、studentNumber等。
/*
*/
~~~java
/*
*/
public class Demo06 {
public static void main(String[] args) {
int a2;//正确的
//int 2a;//错误的,不能以数字开头
//int class;//错误的,不能是关键字。
//int a-b;//错误的,不能包含-
int _a_b;//正确的
//按照小驼峰式定义变量名
int studentAge = 18;
}
}
~~~
po出了这么多知识点,相信各位即将成为或是已经成为大牛的各位们是不是已经对知识有了满满的饱腹感