抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Java基础(手写笔记)

介绍

简单介绍

  • Java是一个面向对象的语言
  • Java语言是一个强类型语言
  • Java的运行需要使用到JRE(java程序的运行时环境)
  • java开发需要使用JDK(java开发工具包)
  • 一个.java文件就是一个java类

JRE (Java Runtime Environment)

是Java程序的运行时环境,包含JVM和运行时所需要的核心类库。

想要运行一个已有的Java程序,那么只需要安装JRE即可。

JRE中包含了:

  • JVM(Java运行虚拟机)
  • 核心类库

JDK (Java Development Kit)

是Java程序开发工具包,包含Jre和开发人员使用的工具。

其中的开发工具:编译工具(javac)和运行工具(java)。

想要开发一个全新的java程序,那么必须安装JDK。

JDK中包含了:

  • JRE
  • 开发工具

JDK 与 JRE 的关系

JDK包含了JRE和开发工具

image-20220421094734751

安装&配置

下载

推荐开发工具包下载地址:ZuluOpenJDK下载地址

官服开发包下载地址:OracleJDK

以上下载不来可以使用:编程宝库JDK

推荐下载JDK11,都2202年了

无论下载哪个版本,对于初学者来说都是可以的,因为开局你应该不会用到核心类库之外的大家伙

安装

强烈推荐安装时使用默认配置安装

运行

运行java程序需要使用java命令运行

1
java /程序/所在/目录/.../xxx.java

文件名和类的关系

一个.java文件就是一个java类,.java文件里的内容必须有一个和.java文件同名的主(main)类

image-20220421093848272

对应的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 
Java程序中最基本的组成单位是类
类的定义格式:
public class 类名 {
... 内容
}
*/
public class HelloWorld {
/*
这是main方法
main方法是程序入口方法,代码的执行是从main方法开始的
*/
public static void main(String []args) {
// 这是输出语句,""里面的内容是可以改变的
System.out.println("Hello World!");
}
}

注释

单行注释 //

1
// 我是单行注释,不影响程序执行

多行注释 /* */

1
2
3
4
/*
我是多行注释
不影响程序执行
*/

关键字

  • 关键字的字母 全部小写
  • 常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观。

image-20220421101041947

以上圈起来的就是关键字

常量

概述

固定不变的值叫做常量,在程序运行过程中,其值不可以发生改变的量

常量分类

常量类型 说明 举例
字符串常量 用双引号扩起来的内容 “Hello”,”你好”
整数常量 不带小数的数字 666, -99
小数常量 带小数的数字 13.14, -3.14
字符常量 用单引号扩起来的内容(只允许单字符) ‘A’,’0’,’我’
布尔常量 布尔值,表示真假 只有两个值:true,false
空常量 一个特殊的值、空值 值是:null

数据类型

计算机存储单元

我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b〞表示。而计算机中最小的存储单元叫“字节(byte)”通常用大写字母“B”表示,字节是由连续的8个位组成。

除了字节外还有一些常用的存储单位,大家比较熟悉:

1B (字节) = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

Java数据类型

java语言是强类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以他们表示的数据大小也是不一样的。

image-20220421104737988

基本数据类型:

  1. 数值型:
    • 整形 (byte, short, int, long)
    • 浮点 (float, double)
    • 字符 (char)
  2. 非数值型:
    • 布尔 (boolean)
    • 类 (class)
    • 接口 (interface)
    • 数组 ([])

数据类型内存占用和取值范围

数据类型 关键字 内存占用 群值范围
整数 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;正数:4.9000000E-324 到 1.797693E+308
浮点数 double 8 负数:-1.797693E+308 到 -4.9000000E-324;正数:4.9000000E-324 到 1.797693E+308
字符 char 2 0-65535
布尔 boolean 1 true, false

基础使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* 
定义变量格式:
数据类型 变量名 = 变量值;
基本数据类型:
byte,short,int,long,float,double,char,boolean
变量的使用:
取值格式:变量名
修改值格式:变量名 = 变量值;
*/

public class VariableDemo {
public static void main(String[] args) {
// 定义整形变量
int a = 10;
// 输出变量
System.out.println(a);
// 修改变量
a = 20;
// 重新输出
System.out.println(a);
}
}

变量使用的注意事项

  • 名字不能重复
  • 变量未赋值,不能使用
  • long类型的变量定义的时候,为了防止整数过大,后面要加l(因为使用long定义整形的时候,默认优先使用int类型定义数据)
  • float类型的变量定义的时候,为了防止类型不兼容,后面要加f

基本数据类型int和lang的区别

int:整形

lang:长整形

基本数据类型float和double的区别

float:单精度浮点数

double:双精度浮点数

  1. 在内存中占有的字节数不同

    • 单精度浮点数(float)在计算机内占4个字节
    • 双精度浮点数(double)在计算机内占8字节
  2. 有效数字位数不同

    • 单精度浮点数(float)有效数字8位(小数点往后8位)
    • 双精度浮点数(double)有效数字16位(小数点往后16位)
  3. 数值取值范围不同

    • 单精度浮点数(float)的表示范围:-3.40E+38~3.40E+38
    • 双精度浮点数(double)的表示范围:-1.79E+308~-1.79E+308
  4. 在程序中处理速度不同

    一般来说,CPU处理单精度浮点数(float)的速度要比处理双精度浮点数(double)快,如果不声明,默认小数为double类型,所如果要用float的话,必须进行强转

    例如:

    1
    2
    3
    4
    5
    6
    7
    // 在定义小数的时候,默认小数为double类型
    double a = 1.12345;
    // 强制定义float类型可使用如下方法
    float f = (float)1.13;
    // or
    float f = 1.13f // 可将后边的f大写,效果一样
    // 注意:使用单浮点类型的数据计算精度会有丢失

标识符

概念

标识符:就是给类,方法,变量起名字的符号。

定义规则

  • 由 数字、字母、下划线(_) 和 美元符($)组成
  • 不能以数字开头
  • 不能是关键字
  • 区分大小写

约定

小驼峰命名法:
  • 约定1:标识符是一个单词的时候,首字母小写
  • 范例1:name
  • 约定2:标识符由多个单词组成的时候,第一个单词首字母小写,其他单词首字母大写
  • 范例2:firstName
大坨峰命名法:
  • 约定1:标识符是一个单词的时候,首字母大写
  • 范例1:Student
  • 约定2:标识符由多个单词组成的时候,每个单词的首字母大写
  • 范例2:GoodStudent

类型转换

自动类型转换

把一个表示数据范围小的数值或者变量赋给另一个表示数据范围大的变量

例:double d = 10;

基本数据数据范围图

image-20220424093852715

注意:

  • 小类型与大类型参与运算时会自动转换成大类型

  • byte和short类型不会自动转换成char类型

强制类型转换

把一个数据范围大的数值或者变量赋值给另一个表示数据范围小的变量

  • 格式:目标数据类型变量名 = (目标数据类型)值或者变量
  • 例:int k = (int)88.88;
1
2
3
4
5
// 定义一个int类型的变量,将double类型的数据88.88保存进去
int k = 88.88; // 这样是不可以的
// 只能进行强制类型转换
int k = (int)88.88; // 这样保存的数据将会是88
// 因为将大数据类型转换成小数据类型会有数据丢失或精度丢失

强制类型转换,由大数据类型转换到小数据类型,不推荐,因为会有数据丢失

算数运算符

运算符:对常量或者变量进行操作的符号

表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。

举例说明:

1
2
3
int a = 10;
int b = 15;
int c = a + b;

+: 是运算符,并且是算数运算符

a + b: 是表达式,由于+是算数运算符,所以这个表达式叫算数表达式

符号 作用 说明
+ 参看小学一年级
- 参看小学一年级
* 参看小学二年级,与”x”相同
/ 参看小学二年级,与”÷”相同
% 取余 获取的是两个数据做出发的余数

注意⚠️:

/%的区别:两个数据做除法,/取结果的商,%取结果的余数。

整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。

字符”+”操作

拿字符在计算机底层对应的数值(ASCII码)来进行计算的

‘A’ -> 65 A-Z对应的ASCII码的值是连续的

‘a’ -> 97 a-z对应的ASCII码的值是连续的

‘0’ -> 48 0-9对应的ASCII码的值是连续的

算数表达式中包含多个基本数据类型的值的时候,整个算数表达式的类型自动进行提升

  • byte类型、short类型和char类型将被提升到int类型

  • 整个表达式的类型自动提升到表达式中最高等级操作数同样的类型

    等级顺序(从小到大):*重点*

    byte、short、char -> int -> long -> float -> double

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class OperatorDemo {
public static void main(String[] args) {
// 定义两个变量
int i = 10;
char c = 'A'; // 字符'A'的值是65
c = 'a'; // 字符'a'的值是97
c = '0'; // 字符'0'的值是48
System.out.println(i + c);

// char ch = i + c; // 错误
// char类型会被自动提升为int类型,所以不能使用char类型变量接收
int j = i + c;
System.out.println(j); //
}
}

字符串的”+”操作

当”+”操作出现字符串时,这个”+”是字符串链接符,而不是算数运算符。

  • “国窖”+1573

在多个数据进行”+”操作时,按从左到右逐个执行算数运算,直到遇到字符串类型的数据的时候才进行字符串拼接。

  • 2008 + 1 + ‘的第一场雪’
1
2
3
4
5
6
7
8
9
10
11
public class OperatorDemo03 {
public static void main(String[] args) {
// 字符串与字符串+操作是字符串的拼接
System.out.println("Hello" + "world");
// 字符串与数字类型的+操作也是拼接
System.out.println("Java" + 11);
System.out.println(11 + "周年");
// 字符串前的数据会按常规算数运算,遇到字符串的时候才会进行转换成字符串进行拼接运算
System.out.println(1 + 99 + "年奋斗目标");
}
}

赋值运算符

符号 作用 说明
= 赋值 a=10,将10赋值给a
+= 加后赋值 a+=b,将a+b的值赋给a
-= 减后赋值 a-=b,将a-b的值赋给a
*= 乘后赋值 a*=b,将axb的值赋给a
/= 除后赋值 a/=b,将a÷b的值赋给a
%= 取余后赋值 a%=b,将a÷b的余数给a

注意⚠️:拓展的赋值运算符隐含了强制类型转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class OperatorDemo04{
public static void main(String[] args) {
// 把10赋值给int类型的变量i
int i = 10;
// +=把左边和右边的数据做加法操作,结果赋值给左边
i += 20;
System.out.println("i:"+i);
// 注意:拓展运算符底层隐含了强制类型转换
short s = 10;
s += 20;
// s = (short)(s + 20);
System.out.println("s:"+s);
}
}

自增自减运算符

符号 作用 说明
++ 自增 变量的值加1
-- 自减 变量的值减1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class OperatorDemo05 {
public static void main(String[] arg) {
int i = 10;
System.out.println("i:" + i);
// 单独使用
i++;
++i;
System.out.println("i:" + i);
// 参与操作使用
int j = i++; // 这里相当于先执行了 i = i + 1 再将i的值赋给了j
System.out.println("i:" + i);
System.out.println("j:" + j);
int a = 0;
int b = a + a++ + ++a + a++ + a;
System.out.println(b) // 7
}
}

注意⚠️:

  • ++和–既可以放在变量的后边,也可以放在变量的前边。

  • 单独使用的时候,++和–无论是放在变量 的前边还是后边,结果是一样的。

  • 参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者–操作。

    参与操作的时候,如果放在变量的前边,先拿变量做++或者–,后拿变量参与操作。

    参与操作的时候,运算是从左往右进行的,请酌情计算

评论