概述
构成:
JDK、JVM、JAR
JDK,javadevelopmentkit
JVM,javavirtual machine
JAR,java runtime Environment
| 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的关键字
注释的方式:
1、单行注释
2、多行注释
3、文档注释,可以和JavaDoc联合使用
/***文档注释**/
标识符和关键字
标识符:java所有的组成部门后需要名字,类名、变量名、以及方法名都为成为标识符
关键字:
package关键字:用于生命包
import关键字:用于导入包,一般在package之后
标识符的要求:
1、以字母、美元符号、下划线之一开始
2、首字符之后可以是以字母、美元符号、下划线或者任意数字组合
3、不能以关键字作为变量名和方法名
4、标识符大小写敏感
5、不建议使用中文或者拼音命名
关键字
运算符
包机制
package关键字:用于生命包
import关键字:用于导入包,一般在package之后
JavaDoc生成文档

javadoc命令是用来生成自己的API文档的
参数信息
数据类型
Java是属于强类型语言,强类型语言要求变量的使用严格的符合规定,所有变量都必须定义之后使用,
java的数据类型

基本类型
数值类型:整数型、浮点数型、字符型(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 表示换行符 |
| 布尔值拓展: |
类型转换

注意:
package com.company;public class Main {public static void main(String[] args) {//操作打数的时候,注意溢出的问题int money = 10_000_000;int year = 20;int total = money * year;//输出存在溢出问题long total2 = money * ((long) money);//不存在溢出问题}}
变量、常量、作用域
变量
定义:可以变化的量
java是一种强类型语言,每个变量必须声明变量类型
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型,和作用域
类型:
类变量
实例变量(全局变量)
局部变量
注意:
每个变量都有类型,类型可以是基本的类型,也可以是引用类型
变量名必须合法的标识符
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
package com.company;public class Demo {//变量=属性//类变量 static,修饰不区分前后static final double salary = 5000;//实例变量:从属于对象/*如果不进行初始化,数值类的默认值是0,0.0布尔值,默认是false其余都是null*/String name;int age;public static void main(String[] args) {//局部变量必须声明和初始化,int i = 1;System.out.println(i);//变量类型 变量名=new Demo()Demo demo = new Demo();//实例变量,使用实例对象来引用便变量System.out.println(demo.age);//类变量 static,可以直接使用System.out.println(salary);}public void add() {}}
常量
一般使用大写,使用final关键字修饰
命名规范
所有变量、方法名、类名:见名知意
作用域
JAVA流程控制
用户交互Scanner
java.util.Scanner是Java5提供的新特性,可以通过Scanner类来获取用户的输入
基本语法
Scanner s=new Scanner(System.in);
通过Scanner类和next()与nextLine()方法获取输入字符串,
在读取前一般使用hasNext()与hasNextLine()判断是否还有输入数据
hasNext()、hasNextLine()会使得当前进行进入阻塞状态,知道输入数据
public class TestScanner01 {public static void main(String[] args) {//创建一个扫描的对象,用于接收键盘的数据Scanner scanner = new Scanner(System.in);System.out.println("使用next方式接收:");//判断用户有没有输入字符串if (scanner.hasNext()) {//使用next()方式接收String str = scanner.next();System.out.println("输出的内容为:" + str);}//及时关闭已经完成工作的IO流scanner.close();}}
Scanner进阶
import java.util.Scanner;public class TestScanner02 {//要求输入多个数字,每个数字按回车确认,通过输入的非数字来结束输入并输出执行结果public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//和,double sum = 0;//计算输入了多少个数字int m = 0;//通过循环判断是否还有输入,并在里面对每一次进行求和和统计while (scanner.hasNextDouble()) {double x = scanner.nextDouble();m = m + 1;sum = sum + x;}System.out.println(m + "个数的和:" + sum);System.out.println(m + "个数的平均值是" + (sum / m));scanner.close();}}
顺序结构
选择结构
循环结构
break&continue

数组
创建数组的三种方式
public static void main(String[] args) {//创建数组的第一种方法int[] arr=new int[6];int intValue=arr[5];//System.out.println(intValue);//创建数组的第二种方法int[] x={1,2,3,4};//System.out.println(x[1]);//创建数组的第三种方法。int[] y= new int[]{1,2,3,4,5};int m=0;boolean length = isLength(m,y);if(length){System.out.println(y[m]);}else{System.err.println("数组标越界");}}//判断数组下标是否越界public static boolean isLength(int m,int arr[]){boolean flag=false;int length = arr.length;if(m<length)flag=true;return flag;}
冒泡排序法
面向对象
面向对象(OOP)
三大特征:封装、继承、多态
集合
IO流
流的概念
定义:内存与存储设备之间传输数据的通道
流的分类
按照流向分
输入流:将<存储设备>中的内容读入<内存>中
输出流:将<内存>中的内容写入<存储设备>中
按照单位分
字节流:以字节为单位,可以读写所有数据
字符流:以字符为单位,只能读写文本数据
按功能:
节点流:具有实际传输数据的读写功能
过滤流:在节点流的基础上增强功能
字节流
字节流的父类(抽象类):
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数组中所有字节,写入输出流
import java.io.FileInputStream;public class TestFileStream {public static void main(String[] args) throws Exception {//创建流对象,并指定文件路径FileInputStream fis = new FileInputStream("D:\\test.txt");//读取文件/** int data = 0;while ((data = fis.read()) != -1) {//转换成字符System.out.print((char)data);}* 以上方法是读取出来一个转化一个,效率并不高* *///第二种方法,一次读取多个字节byte[] buf = new byte[1024];int len = 0;while ((len = fis.read(buf)) != -1) {System.out.println(new String(buf, 0, len));}/*返回读取的个数int count = fis.read(buf);*///关闭流if (fis != null) {fis.close();System.out.println("执行完毕");}}}









