Java入门:掌握基础知识

发表时间: 2023-12-13 14:40

目录:
一、Java 概述
1. Java体系
2. 常用的DOS命令
3. JDK、JRE、跨平台、Java平台
4. Java代码的编写执行过程
5. 注释
6. 关键字、标识符
7. Java中的数据类型
8. Java中的常量
二、变量和运算符
1. 变量和计算机存储单元
2. 数据类型和常量
3. 数据类型转换
4. 运算符 和 优先级
三、引用数据类型、流程控制语句 和 数组
1. 引用数据类型
2. 流程控制语句
3. 数组
四、方法
1. 引入
2. 语法格式
3. 方法调用
4. 注意事项
5. 方法重载
6. 可变参数列表


一、Java 概述

1. Java体系

  • java是一个体系,包含
    • java语言
    • 运行在各种平台上的虚拟机
    • class字节码文件格式
    • java api(jdk中提供的api),类库
    • 商业的或者三方优秀开源类库

Java体系

2. 常用的DOS命令

常用的DOS命令

3. JDK、JRE、跨平台、Java平台

  • JDK:它是Java开发运行环境,在程序员的电脑上当然要安装JDK;

JDK = JRE + 开发工具集(例如Javac编译工具等)

  • JRE:Java Runtime Environment它是Java运行环境,如果你不需要开发只需要运行Java程序,那么你可以安装JRE

JRE = JVM + JavaSE标准类库

  • JDK 包含 JRE 包含 JVM
  • 跨平台特性
    • 平台指的是操作系统 (Windows,Linux,Mac)。
    • Java程序可以在任意操作系统上运行,一次编写到处运行
    • 实现跨平台需要依赖Java的虚拟机 JVM (Java Virtual Machine)
      为什么可以跨平台?因为JAVA程序运行依赖虚拟机,而针对不同操作系统有不同版本的虚拟机
    • Java语言是跨平台的,Java虚拟机不是跨平台的
  • Java平台
    • Java SE (桌面程序)标准版
    • Java EE (Web程序)企业版
    • Java ME(移动设备)微型版 -- Android,IOS兴起后就很少使用了

4. Java代码的编写执行过程

  • 源文件:编写Java源文件(我们也称之为源代码文件),它的扩展名为.java;
  • 编译:然后通过编译器把源文件编译成字节码文件,字节码文件扩展名为.class;
    为什么要编译?JAVA程序是由虚拟机运行的,我们所写的代码虚拟机不认识,我们要把自己写的代码翻译成虚拟机所认识的语言
  • 运行:最后使用解释器来运行字节码文件。

Java代码的编写执行过程

5. 注释

  • 定义:用来解释和说明程序的文字,注释是不会被执行的
  • 分类
    • 单行注释: //注释内容
    • 多行注释: /*注释内容*/
    • 文档注释: /**注释内容*/
  • 注意
    • 对于单行和多行注释,被注释的文字,不会被JVM解释执行
    • 对于文档注释,可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档
    • 单行注释可以嵌套使用,多行注释不能嵌套使用

6. 关键字、标识符

  • 关键字
    • 定义:是被Java语言赋予特殊含义,具有专门用途的单词,比如之前接触的class,int,double均为Java已经预设好的
    • 特点:字母全部小写, 注意String不是关键字
    • 注意事项:goto 与 const 是Java中的保留字,即没有赋予特殊含义却仍被Java占用的单词
  • 标识符
    • 定义:就是给类,接口,方法,变量等起名字时使用的字符序列
    • 组成规则(只能包含下面的内容,不能有其它内容):
      • 英文大小写字母
      • 数字字符
      • $和_
    • 注意事项:
      • 数字不能开头
      • 不可以使用关键字
      • 严格区分大小写,不限制长度
      • 起名时,尽量达到见名知意
    • 标识符中常见的命名规则(这些规定是不受语法约束的):
      • 包名:多单词组成时所有字母均小写,使用.连接,域名反写 aaa.bbb.ccc
      • 类名&接口名:大驼峰式 Aaa AaaBbbCcc
      • 变量名&方法名:小驼峰式 aaa aaaBbbCcc
      • 常量名:多单词组成是所有字母均大写,使用_连接 AAA_BBB_CCC

7. Java中的数据类型

为什么有数据类型?
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型

  • Java中数据类型的分类
    • 基本数据类型: 基本数据类型是Java语言中内置的类型,分别是整数类型、小数类型、字符类型、布尔类型。这四类基本类型是最简单、最基础的类型。
    • 引用数据类型: 是强大的数据类型,它是基于基本数据类型创建的。
      • JavaSE中提供了一个超级类库,类库中包含了近万种引用数据类型。
      • 基本类型:类 接口 数组 枚举

8. Java中的常量

  • 定义:常量就是不变的数据量, 在程序执行的过程中其值不可以发生改变
  • 整形常量默认是 int类型

在Java中,定义长整形数据如果值超过int取值范围后面要+L,否则是错误的

  • 小数常量默认是 double类型

D后缀为double,F后缀为float
定义float类型的数据后面要 +
f ,否则默认是double

  • 常量分类
    • 整数类型
      • 十进制表示方式:正常数字。 如 13、25等
      • 二进制表示方式:以 0b(0B) 开头。 如0b1011 、0B1001
      • 十六进制表示方式:以 0x(0X) 开头。 数字以0-9及A-F组成 如0x23A2、0xa、0x10
      • 八进制表示方式:以 0 开头。 如01、07、0721
    • 小数类型:如1.0、-3.15、3.168等
    • 布尔类型:true、false ,注意严格区分大小写
    • 字符类型:
      • 如 'a','A', '0', '家'
      • 字符必须使用 '' 包裹,并且其中只能且仅能包含一个字符
    • 字符串类型:
      • 字符串String类型是一种引用类型,我们先了解作为常量类型的使用方式
      • 如 "我爱Java","0123","","null"
      • 字符串必须使用 "" 包裹,任意长度
  • 在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用 补码 进行的
    • 原码: +8: 0 000 1000 -8: 1 000 1000

就是二进制定点表示法,即最高位为符号位,0表示正,1表示负,其余位表示数值的大小。

    • 反码: +8: 0 000 1000 -8: 1111 0111

正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

    • 补码: +8: 0 000 1000 -8: 1111 1000

正数的补码与其原码相同;负数的补码是在其反码的末位加 1


二、变量和运算符

1. 变量和计算机存储单元

  • 变量是内存中装载数据的小盒子,你只能用它来存数据和取数据
  • 变量名是标识符,这说明只要是合法的标识符都可以用来做变量名。
  • 变量使用的注意事项
    • 变量定义后可以不赋值,使用时再赋值。不赋值不能使用
    • 变量使用时有作用域的限制。(局部变量和全局变量)
    • 变量不可以重复定义
  • 计算机存储单元
    • 计算机中储存和运算的最小单位:一个字节,也就是1个字节(byte)
    • 常用储存单位1B(字节) = 8bit(比特位)

1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB


2. 数据类型和常量

  • 四类八种

byte: 1个字节 : -128~127 (数据表示范围)
short: 2个字节: -32768~32767
int: 4个字节: -2147483648~2147483648
long: 8个字节: -2^63~2^63-1
float: 4个字节: -3.403E38~3.403E38
double: 8个字节: -1.798E308~1.798E308
char: 2个字节: 表示一个字符,如('a','A','0','家')
boolean: 1个字节: 只有两个值true与false

  • 变量必须要有明确的类型,什么类型的变量装载什么类型的数据
  • 数据类型范围从小到大排序:

byte < char < short < int < long < float < double,
布尔类型boolean不能参与类型转换


3. 数据类型转换

  • 自动类型转换:表示范围小的数据类型转换成范围大的数据类型,这种方式称为自动类型转换
    自动类型转换格式范围大的数据类型 变量 = 范围小的数据类型值;

默认转换:byte、short、char —> int —> long —> float —> double
byte、short、char 相互之间不转换,他们参与运算首先转换为
int类型

  • 强制类型转换:表示范围大的数据类型转换成范围小的数据类型,这种方式称为强制类型转换

强制类型转换格式范围小的数据类型 变量 = (范围小的数据类型) 范围大的数据类型值;


4. 运算符 和 优先级

算数运算符

+ - * / % ++ --

+: 正号、加、连接字符串
++,--运算符后置时,先使用变量a原有值参与运算操作,运算操作完成后,变量a的值自增1或者自减1;
++,--运算符前置时,先将变量a的值自增1或者自减1,然后使用更新后的新值参与运算操作。

  • 注意事项
    • 加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串。
    • 除法当两边为整数时,取整数部分,舍余数。当其中一边为浮点型时,按正常规则相除。
    • % 为整除取余符号,小数取余没有意义。结果符号与被取余符号相同。
    • 整数做被除数,0不能做除数,否则报错。
    • 小数做被除数,整除 0 结果为 Infinity,对 0 取模结果为 NaN

赋值运算符

+= -= *= /= %=

  • +=, -=, *=, /=这样的赋值运算符包含了一个 强制转换 的操作,会将左右两边运算后的结果,强制类型转换后赋值给左边
  • 注意:赋值运算符左边必须是变量
int n = 10;byte by = 20;by += n; // 运算完毕后,by的值为byte类型30, 相当于代码 by = (byte)(by + n);

比较运算符

== != < > <= >=

  • 结果只能是true 和 false
  • 字符间的比较,比较的是其 ASCII 值
  • 浮点数 与 整数 比较,只要值相等,就返回 true

逻辑运算符

&与-----false&true-----False
|或-----false|true-----True
^异或-----true^flase-----True
!非-----!true-----Flase
&&短路与-----false&&true-----False
||短路或-----false||true-----True

  • && : 又叫短路运算符,A&&B,如果A为假,不会去计算B的值,直接得到结果为 false
    & : A & B,即使A为假,也会计算B的值。
  • || : 也是短路运算符,A || B,如果A为真,不会去计算B的值,直接得到结果为 true
    | : A | B,即使A为真,也会计算 B 的值。
  • 异或^ : 左右两边条件结果相同,结果就为false,左右两边条件结果不同,结果就为true;

三目运算符

  • 语法:布尔表达式 ? 表达式1 : 表达式2
  • 当布尔表达式的值为true,则返回表达式1的值,否则返回表达式2的值

运算符优先级

优先级 描述 运算符
1 括号 ()、[]
2 正负号 +、-
3 自增自减,非 ++、--、!
4 乘除,取余 *、/、%
5 加减 +、-
6 移位运算 <<、>>、>>>
7 大小关系 >、>=、<、<=
8 相等关系 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 逻辑与 &&
13 逻辑或 ||
14 条件运算 ?:
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、|=、<<=、>>=、>>>=


位运算符

位运算符

  • 位运算是直接对 二进制 进行运算
  • 在位运算中,操作数必须是 整型
  • 位异或运算符的特点
    • 一个数据对另一个数据位异或两次,该数本身不变。
    • 任何数和自身异或,结果为0
    • 任何数和0异或,结果为本身
    • << 左移一位,相当于乘以2: 3 << 2 = 12 --> 322=12
    • >> 右移一位,相当于除以2: 3 >> 1 = 1 --> 3/2=1
    • 3 >>> 1 = 1 --> 3/2=1
  • 同样的运算,位运算的效率高于算术运算

三、引用数据类型、流程控制语句 和 数组

1. 引用数据类型

  • 引用数据类型的变量定义及赋值格式:数据类型 变量名 = new 数据类型();
  • 调用该类型实例的功能:变量名.方法名();
  • Scanner类
    • 导包import java.util.Scanner;
    • 创建对象实例Scanner sc = new Scanner(System.in);
    • 调用方法
int  i = sc.nextInt(); //用来接收控制台录入的数字String s = sc.next(); //用来接收控制台录入的字符串
  • 随机数类Random
  • 方法简介
public int nextInt(int maxValue)    //产生 [0,maxValue) 范围的随机整数,包含0,不包含maxValue;public double nextDouble()          //产生 [0,1) 范围的随机小数,包含0.0,不包含1.0。

Random使用方式:

  • import导包import java.util.Random
  • 创建实例格式Random 变量名 = new Random();
  • 赋值a = 变量名.nextInt(maxValue);

2. 流程控制语句

1. if2. if...else...3. if...else if...else...4. while5. for6. do...while...7. switch case default break//case 穿透性:如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式

break语句

  • 作用:跳出所在的循环体
  • 使用方式
    • 无法单独使用,必须将break关键字置于 switch循环语句
  • 运行规律
    • 不需要判断任何条件,只要遇到break变直接跳出执行后续代码。会完全跳出选择或者循环结构
    • 只能跳出 最近的 代码块,不能跨越多级代码块
  • 标记
    • 当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层循环添加标记
    • 使用方式:在外层循环外的某行前边使用,后边跟有冒号:的标识符,即定义完毕。
    • 使用时当在内层循环使用 breakcontinue 时后边紧跟之前定义的标号即可
itcast: for (i = 1; i <= 9; i++) { // 外层循环,itcast是标记    for (j = 1; j <= i; j++) { // 内层循环        if (i > 4) { // 判断i的值是否大于4        break itcast; // 跳出外层循环    }}

continue语句

  • 作用:提前结束本次循环,继续进行下次循环
  • 使用方式: 无法单独使用,必须将continue关键字置于 循环语句
  • 运行规律: 不需要判断任何条件,只要遇到continue变直接跳出本轮循环进行下次循环

return 、break、continue 跳出控制语句的区别

  • break:结束当前整个循环,执行当前循环下边的语句。
  • continue:结束本次循环,继续进行下次循环
  • return: 用于结束一个方法,返回给上层调用者,如果位于main方法内,相当于结束了程序。

return也可以用于结束循环,因为return用于结束一个方法,如果方法中有循环的话,不管return嵌套于多少层循环之内,循环都结束。
不会再执行循环后面的语句


3. 数组

一维数组

  • 概述长度不可变、元素类型相同
    • 一组数据的集合,数组中的每个数据被称作'元素'
    • 在数组中可以存放'任意类型'的元素
    • 但'同一个数组'里存放的元素类型必须一致。
    • 数组是'恒定, 定长的
  • 数组的定义1
    • 格式: 数据类型[] 数组名 = new 数据类型[长度]; int[] x = new int[100];
    • 使用属性数组名.length
    • 数组的最小索引是 0, 最大索引是 数组.length-1
  • 数组的定义2
    • 数组初始化:在定义数组时只指定数组的长度,由系统自动为元素 赋初值 的方式称作动态初始化。
    • 格式:
    • 数据类型[] 数组名 = new 类型[长度]; int[] arr = new int[4];
    • 类型[] 数组名 = new 类型[]{元素,元素,……}; int[] arr = new int[]{1,2,3,4};
    • 类型[] 数组名 = {元素,元素,元素,……}; int[] arr = { 1, 2, 3, 4 };

JVM内存划分

  • 寄存器:内存和CUP之间
  • 本地方法栈: JVM调用了系统中的功能
  • 方法和数据共享: 运行时期class文件进入的地方
  • 方法栈:所有的方法运行的时候进入内存
  • :存储的是容器和对象

数组中常见的异常

  • 数组的索引越界异常
  • 空指针异常

二维数组

  • 定义格式
//第一种定义格式//相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组- int[][] arr = new int[3][4];//不推荐//第二种定义格式//第二种方式和第一种类似,只是数组中每个元素的长度不确定,必须要new:arr[0] = new int[5];...int[][] arr = new int[3][];//第三种定义格式//二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9}int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

二维数组内存

  • 比如:int[][] arr = new int[3][2];
  • 外层数组长在内存开辟连续的3个大的内存空间,每一个内存空间都对应的有地址值
  • 每一个大内存空间里又开辟连续的两个小的内存空间.

打印数组

//打印一维数组五种方法Arrays.toString(arr)for(int n: arr)      System.out.println(n+", ");  for (int i = 0; i < arr.length; i++) {     System.out.print(arr[i] + ", ");  }  System.out.println(Arrays.asList(arr));  Arrays.asList(arr).stream().forEach(s -> System.out.println(s));//java8  //打印二维数组三种for(int i=0;i<arr.length;i++) {      for(int j=0;j<arr[i].length;j++) {          System.out.print(arr[i][j]+" ");      }      System.out.println();  //换行  }  for(int[] a:arr) {      for(int b:a){          System.out.print(b+" ");      }      System.out.println();//换行  } for(int i=0;i<arr.length;i++)      System.out.println(Arrays.toString(arr[i]));  //打印三维数组三种int [][][] arrays=new int[4][3][2];//在栈空间创建一个空间  for(int i=0;i<arrays.length;i++) {      for(int i1=0;i1<arrays[i].length;i1++) {          for(int i2=0;i2<arrays[i][i1].length;i2++) {          System.out.print(arrays[i][i1][i2]);      }      System.out.println();//二维换行  }  System.out.println();//三维换行  }  

四、方法

1. 引入

为什么要有方法:提高代码的复用性
什么是方法:完成特定功能的代码块

2. 语法格式

  • 访问修饰符:方法允许被访问的权限范围。( public,protected,private,无修饰符 )
  • 返回类型:void、任何数据类型
  • 方法名:同变量名规则。小写;多个单词,第一个单词首字母小写,其余首字母大写 。myMethod
  • 参数列表:可以省略。参数类型 + 参数名,...

3. 方法调用

  • 可以使用 对象名 调用方法,静态方法是使用 类名 调用的
  • 方法包括在类中,调用时先创建包含方法的类的对象,然后用对象再去调用方法。
    • 创建对象:类名 对象名 = new 类名();
    • 调用:对象名.方法名();

4. 注意事项

  • 方法参数是 基本类型 ,传递的是值。(包含String类型),形式参数的改变对实际参数不影响
  • 方法参数是 引用类型,传递的是内存地址值。(String类型除外),形式参数的改变对实际参数有影响
  • 方法的定义只能放在类里面,不能嵌套定义。故而不能在主方法内直接定义方法
  • 方法返回值是void,方法中可以省略return
  • 方法一般在主方法的前面定义
  • 调用方法的时候,返回值是void, 不能写在输出语句中

5. 方法重载

  • 方法的重载:在同一个类中,方法名相同,参数列表不同。与返回值类型无关。
  • 参数列表不同
    • 参数个数不同
    • 参数类型不同
    • 参数的顺序不同(算重载,但是在开发中不用),注意:必须是不同数据类型。相同类型不存在顺序不同
  • 方法重载注意事项
    • 重载和参数变量名无关
    • 重载和返回值类型无关如void method(int x)与int method(int y)不是方法重载,不能同时存在
    • 重载和修饰符无关
    • 重载看 方法名参数列表

6. 可变参数列表

  • 例:public void sum(int... n){}
  • 参数列表中如果有两个以上的参数,可变参数一定在最后
  • 可以将数组传递给可变参数列表
  • 数组作为参数时,不能将多个值传递给数组的
  • 一个方法的形式参数列表,只能有一个可变参数列表
  • 方法名相同,一个参数是可变参数,一个参数是一维数组,这两个方法不是重载,因为 一个可变参数等价于相应类型的一维数组
    就可以对可变参数列表,进行相应的数组操作,比如求长度
  • 可变参数列表所在的方法,是最后被执行访问的
  • 方法重载的时候,既可以定义有可变参数的同名方法,也可以定义有确定参数个数的方法,jvm调用方法时,会优先调用 有确定参数个数 的方法

完整版PDF版关注111自取