概述

构成:

JDK、JVM、JAR
JDK,javadevelopmentkit
JVM,javavirtual machine
JAR,java runtime Environment
image.png

JavaSE SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
JDK 全称:Java Development Kit,java开发工具包,java语言编写的程序所需的开发工具包,JDK包含了JRE,同时还包括java源码的编译器javac、监控工具jconsole、分析工具jvisualvm等。一般面向开发人员。
JRE 全称:Java Runtime Environment,Java 运行时环境。它主要包含2块:
jvm 的标准实现;Java 的一些基本类库。Jre面向使用者,只有电脑安装了jre,就可以运行java应用程序。
JVM 英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件

jdk文件目录

bin 存放java启动命令及其开发工具命令(如javac),
db 纯java开发的数据据库Derby,是一个开源的纯java开发的关系型数据库
include C语言头文件,支持用java本地接口和java虚拟机的接口来实现本机代码编程
jre JDK自含JRE的根目录,这是系统属性java.home所指向的目录,目录文件如下
lib 开发工具所使用的文件。

java命名规则:

1、标识符可以是以任意大小写入字母、数字、下划线、美元符号组成。
但是不可以以数字开头,且严格区分大小写,不能是java的关键字

面向对象(OOP)
三大特征,封装、继承、多态

注释的方式:

1、单行注释
2、多行注释
3、文档注释,可以和JavaDoc联合使用

  1. /**
  2. *文档注释
  3. *
  4. */

标识符和关键字

标识符:java所有的组成部门后需要名字,类名、变量名、以及方法名都为成为标识符
关键字:
package关键字:用于生命包
import关键字:用于导入包,一般在package之后
标识符的要求:
1、以字母、美元符号、下划线之一开始
2、首字符之后可以是以字母、美元符号、下划线或者任意数字组合
3、不能以关键字作为变量名和方法名
4、标识符大小写敏感
5、不建议使用中文或者拼音命名

关键字

运算符

image.png
Math类
很多运算,我们会使用工具类来操作
逻辑运算符

包机制

package关键字:用于生命包
import关键字:用于导入包,一般在package之后

image.png

JavaDoc生成文档

image.png
javadoc命令是用来生成自己的API文档的
参数信息

image.png

数据类型

Java是属于强类型语言,强类型语言要求变量的使用严格的符合规定,所有变量都必须定义之后使用,

java的数据类型

JAVA基础 - 图7
基本类型
数值类型:整数型、浮点数型、字符型(char占用两个字节)
Boolean类型
引用类型
类、接口、属数组

基本数据类型 引用数据类型
数值型(整数型byte、short、int、long) (class)包括Object、String、Date 、
浮点数型(float、double) void(代表Void 类是一个不可实例化的占位符类,
它保持一个对代表 Java 关键字 void 的 Class 对象的引用)、
字符型(char) Integer Long Boolean Byte Character Double Float Short
布尔型(boolean) 接口(interface)

枚举(enum)

注解(annotation)

1、整型

整型 字节数 对应整数范围
byte 1字节 -128——127
short 2 字节 -32,768 —— 32,767
int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿)
long 8 字节 -9,223,372,036,854,775,808——9,223,372,036854,775,807

2、浮点型

浮点型 字节数 对应实数范围
float 4 字节 32位IEEE 754单精度(有效位数 6 – 7位)
double 8 字节 64位IEEE 754双精度(有效位数15位)

3、真值类型

字节类型 容量
boolean 1位 true或falsey

4、引用类型

类型 备注
类(class)
接口(interface)
数组(Array)

变量的数据转换

格式:目标类型 变量 =(目标类型)值

自动转换:小变大
强制转换:大变小

Unicode编码的字符单元

字节类型 字节量 对应的字符集范围
char 2字节 整个Unicode字符集

类Class的引用

可以自定义创建,也可以引用
Object,Object是一个很重要的类,
String
Date
Void:这个是一个不可实例化的占位符类,它保持一个对代表 Java 关键字 void 的 Class 对象的引用。

接口interface引用

常见的接口:集合

List

变量的作用域

变量被定义的第一个大括号就是变量的作用域

字节

位(bit) 计算机内部数据存储的最小单位,11001100就是一个八位的二进制数
字节(byte) 计算机中数据处理的基本单位,习惯上用大写B表示
字符 计算机中使用的字母、数字、字、符号
1B(Byte)=8bit(位)
1024B=1KB
2^10=1024

拓展

整数型拓展: 二进制、八进制、十进制、16进制
浮点数拓展: float和double具有有限、离散、大约的性质,银行表示钱,使用BigDecimal,数学工具类
字符拓展: 所有的字符本质上是数字,使用unicode编码表示
转移字符: \t 表示制表符
\n 表示换行符
布尔值拓展:

类型转换

image.png

注意:
image.png

  1. package com.company;
  2. public class Main {
  3. public static void main(String[] args) {
  4. //操作打数的时候,注意溢出的问题
  5. int money = 10_000_000;
  6. int year = 20;
  7. int total = money * year;//输出存在溢出问题
  8. long total2 = money * ((long) money);//不存在溢出问题
  9. }
  10. }

强制类型转换:高变低
自动转换:低变高

变量、常量、作用域

变量

定义:可以变化的量
java是一种强类型语言,每个变量必须声明变量类型
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型,和作用域

类型:
类变量
实例变量(全局变量)
局部变量
注意:
每个变量都有类型,类型可以是基本的类型,也可以是引用类型
变量名必须合法的标识符
变量声明是一条完整的语句,因此每一个声明都必须以分号结束

  1. package com.company;
  2. public class Demo {
  3. //变量=属性
  4. //类变量 static,修饰不区分前后
  5. static final double salary = 5000;
  6. //实例变量:从属于对象
  7. /*
  8. 如果不进行初始化,数值类的默认值是0,0.0
  9. 布尔值,默认是false
  10. 其余都是null
  11. */
  12. String name;
  13. int age;
  14. public static void main(String[] args) {
  15. //局部变量必须声明和初始化,
  16. int i = 1;
  17. System.out.println(i);
  18. //变量类型 变量名=new Demo()
  19. Demo demo = new Demo();
  20. //实例变量,使用实例对象来引用便变量
  21. System.out.println(demo.age);
  22. //类变量 static,可以直接使用
  23. System.out.println(salary);
  24. }
  25. public void add() {
  26. }
  27. }

常量

一般使用大写,使用final关键字修饰
命名规范
所有变量、方法名、类名:见名知意

image.png

作用域

根据作用域

JAVA流程控制

用户交互Scanner

java.util.Scanner是Java5提供的新特性,可以通过Scanner类来获取用户的输入
基本语法

  1. Scanner s=new Scanner(System.in);

通过Scanner类和next()与nextLine()方法获取输入字符串,
在读取前一般使用hasNext()与hasNextLine()判断是否还有输入数据
hasNext()、hasNextLine()会使得当前进行进入阻塞状态,知道输入数据

  1. public class TestScanner01 {
  2. public static void main(String[] args) {
  3. //创建一个扫描的对象,用于接收键盘的数据
  4. Scanner scanner = new Scanner(System.in);
  5. System.out.println("使用next方式接收:");
  6. //判断用户有没有输入字符串
  7. if (scanner.hasNext()) {
  8. //使用next()方式接收
  9. String str = scanner.next();
  10. System.out.println("输出的内容为:" + str);
  11. }
  12. //及时关闭已经完成工作的IO流
  13. scanner.close();
  14. }
  15. }

Scanner进阶

  1. import java.util.Scanner;
  2. public class TestScanner02 {
  3. //要求输入多个数字,每个数字按回车确认,通过输入的非数字来结束输入并输出执行结果
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. //和,
  7. double sum = 0;
  8. //计算输入了多少个数字
  9. int m = 0;
  10. //通过循环判断是否还有输入,并在里面对每一次进行求和和统计
  11. while (scanner.hasNextDouble()) {
  12. double x = scanner.nextDouble();
  13. m = m + 1;
  14. sum = sum + x;
  15. }
  16. System.out.println(m + "个数的和:" + sum);
  17. System.out.println(m + "个数的平均值是" + (sum / m));
  18. scanner.close();
  19. }
  20. }

顺序结构

image.png

选择结构

image.png
image.png
image.png

循环结构

image.png
image.png
image.png
image.png
image.png
image.png

break&continue

image.png

数组

创建数组的三种方式

  1. public static void main(String[] args) {
  2. //创建数组的第一种方法
  3. int[] arr=new int[6];
  4. int intValue=arr[5];
  5. //System.out.println(intValue);
  6. //创建数组的第二种方法
  7. int[] x={1,2,3,4};
  8. //System.out.println(x[1]);
  9. //创建数组的第三种方法。
  10. int[] y= new int[]{1,2,3,4,5};
  11. int m=0;
  12. boolean length = isLength(m,y);
  13. if(length){
  14. System.out.println(y[m]);
  15. }else{
  16. System.err.println("数组标越界");
  17. }
  18. }
  19. //判断数组下标是否越界
  20. public static boolean isLength(int m,int arr[]){
  21. boolean flag=false;
  22. int length = arr.length;
  23. if(m<length)
  24. flag=true;
  25. return flag;
  26. }

冒泡排序法

面向对象

面向对象(OOP)
三大特征:封装、继承、多态

集合

IO流

流的概念
定义:内存与存储设备之间传输数据的通道

流的分类
按照流向分
输入流:将<存储设备>中的内容读入<内存>中
输出流:将<内存>中的内容写入<存储设备>中
image.png
按照单位分
字节流:以字节为单位,可以读写所有数据
字符流:以字符为单位,只能读写文本数据
按功能:
节点流:具有实际传输数据的读写功能
过滤流:在节点流的基础上增强功能

字节流

字节流的父类(抽象类):
InputStream:字节输入流
public int read(){}
public in read(byte[] b){}
public int read(byte[] b,int off,int len){}
OutputStream:字节输出流
public void write(int a){}
public void write(byte[] b){}
public void write(byte[] b,int off,int len){}

文件字节流

FileInputStream:输入流
方法:public int read(byte[] b) 从流中读取多个字节,将读到的内容存入b数组,返回实际的读到的字节数,如果达到文件尾部,则返回-1
FileOutputStream:输出流
方法:public void write(byte[] b) 一次写多个字节,将b数组中所有字节,写入输出流

  1. import java.io.FileInputStream;
  2. public class TestFileStream {
  3. public static void main(String[] args) throws Exception {
  4. //创建流对象,并指定文件路径
  5. FileInputStream fis = new FileInputStream("D:\\test.txt");
  6. //读取文件
  7. /*
  8. * int data = 0;
  9. while ((data = fis.read()) != -1) {
  10. //转换成字符
  11. System.out.print((char)data);
  12. }
  13. * 以上方法是读取出来一个转化一个,效率并不高
  14. * */
  15. //第二种方法,一次读取多个字节
  16. byte[] buf = new byte[1024];
  17. int len = 0;
  18. while ((len = fis.read(buf)) != -1) {
  19. System.out.println(new String(buf, 0, len));
  20. }
  21. /*返回读取的个数
  22. int count = fis.read(buf);*/
  23. //关闭流
  24. if (fis != null) {
  25. fis.close();
  26. System.out.println("执行完毕");
  27. }
  28. }
  29. }

字符流

File类

编码方式