# JAVA 简介

Java 是一门伟大的面向对象程序设计语言,Java 诞生于 1995 年 5 月目前属于 Oracle 公司, Java 是一种高级语言,你可能听过的其他高级语言还有 Python C C++ 等 有 高级语言 自然也有 低级语言,一般计算机世界里把 低级语言 叫做机器语言或者汇编语言,实际上计算机只能运行低级语言, 所以高级语言编写的程序必须先被翻译成低级语言才能运行

image-20210227102426911

image-20210227103558208

# java 也称 c++--

image-20210227102641373

# java 应用

image-20210226223514522

# java 学习路线

image-20210226224918736

# 低级语言就是接近硬件的语言

# 1. 高级语言和低级语言

常见的低级语言有:机器码、汇编语言
高级语言常见如:c,c++,java,python,PHP,c#,Ruby,go,kotlin,swift。

机器码:计算机能够直接识别的二级制编码,无论语言多高级都要转成二级制文件来让计算机识别运行。

汇编:用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,在不同的设备中有着不同的指令集

高级语言:为省去编程时候的不必要的操作细节,节省代码量,可读性强,维护性强,更贴近人性化

高级语言与低级语言的区别:高级语言大部分不能直接更硬件打交道,这使得相对来的程序运行速度降低,总之一句话来说那种语言更接近人性化的语言就更高级。

# jdk :JAVA Development kit 开发环境

# jre : JAVA Runtime Environment 运行环境

# jvm:java 虚拟机用来屏蔽底层系统的差别

image-20210227103929722

# Java 环境配置

# 卸载 jdk

删除 Java 的安装目录

删除 Javahome

删除 path 路径下关于 Java 的目录

# 安装 jdk

找到下载地址

环境变量添加 JAVA_HOME

jdk 安装位置

添加 path 路径

% JAVA_HOME%\bin //bin 目录存放了一些 Java 的可执行文件

%JAVA_HOME%\jre\bin

cmd 输入 java -version

出现 java 版本号则安装成功

# java 语言的执行

Java 编译的过程并不生成机器语言而是生成字节码,通过 jvm 支持了字节码的解释运行,源代码不能被机器运行

image-20210227122505454

image-20210227122535819

println 是 print new line 的缩写

java 大小写敏感

每一行代码结束的地方用;结尾

用记事本写好 java 代码后命名为 HelloWorld.java 的文件然后 cmd 进入文件目录下

输入 javac hello.java 编译 java 文件会生成一个 class 文件

输入 java HelloWorld 运行 class 文件

类名与文件名相同

得到控制台输出

# java 程序运行机制

  • 编译型 一次翻译完成
  • 解释型 一句一句的翻译实时
  • image-20210227120243450

java 是先编译成字节码后一句句解释

# java 开发环境安装(ide)

使用 IDEA

快捷键:

psvm

sout

# IDEA 使用及优化

详情百度

# Java 注释

image-20210327220930918

image-20210327221001606

加在类上就是类的注释,加在方法上就是方法的注释

命令行生成 java 文档

  • 在 idea 里右键打开文件位置
  • 在资源管理器文件路径之前输入 cmd 加空格 回车
  • 进入命令行后 输入 javadoc -encoding UTF-8 Doc.java
  • 最后生成完毕之后进入文件夹点击 index.html 文件
  • 可以看到详细的 java 文档

# java 变量

每个变量都需要声明其类型

要素包括变量名,作用域,变量类型

  • 类变量:static
  • 示例变量:方法的外面,类的里面,属于对象,初始值为 0,bool 值为 false
  • 局部变量:必须声明和初始化值

# 常量

  • 初始后不会被改变的值,他在程序运行中值不会被改变
  • 在类型前面加 final

# 动态类型和静态类型

动态性语言是指在程序运行期间才给变量指定数据的类型,常见于 python 和 Ruby,而静态类型语言则恰好相反,在写程序代码的时候就要指定变量的类型,这种语言有:c,c++,java

Java 变量的使用需要先声明

string message="stay hungry,stay foolish";

  • 也就是说所有的变量要先定义再使用

# 标识符

标识符以字母下划线或者美元符号开头也可以中文命名

# 基本数据类型

# 关键字

字符串 数字 布尔 byte(最大 127)

小整数 short

整形 int

大整数 long 最后加 L

小浮点数 float 最后加 F

大浮点数 double

# float :有限 离散 舍入误差 大约但不等于

最好不要用浮点数进行比较

# string 类 不是关键字

# 引用数据类型

  • 接口

  • 数组

# 强制类型转化

  • 从高到低转化
  • 注意溢出和精度问题
  • 加减乘除,有 long 类型结果就是 long,有 double 就是 double 类型

# 自动转化

例如:

public class Hello {
    public static void main(String[] args) {
        int a=100_000_000_0;
        int b=20;
        int c=a*b;
        long d =a*b;
        System.out.println(c);
        System.out.println(d);
    }
}

输出:

-1474836480

-1474836480

方法: long e=(long)a*b;

  • java 的命名规范

    骆驼有个非常明显的特点就是它的驼峰,由于它的这种非常明显的特性,编程语言模仿了这个驼峰特性,具体是啥呢?那就是把每个具体单词的首字母变成大写,这样大写的字母就像驼峰一样 3 比如说:用户名称如果用英文单词来表示的话就是 UserName, 大家注意看一下,这个大写的 U 和 N 是不是像驼峰一样?这样的例子可以很多,比如说我的文档:MyDocument 密码:Password

方法名遵守的是小驼峰,和驼峰的区别就是第一个单词是小写的

image-20210228111554747

# 运算符

image-20210327221048286

# 自增自减

image-20210327221103985

# 位运算

A=0010 1101
B=1011 1100
A&B=0010 1100
A|B=1011 1101
A^B=1001 0001 // 相同为 0,不同为 1
// 左移与右移
 System.out.println(2<<3);
// 输出 16
// 原理:左移相当于把数字乘 2 效率高!!!

# 字符串连接符

当运算式中出现字符串,+ 就会把其他转化为字符串拼接

System.out.println(""+2+3);
System.out.println(2+3+"");

输出 23 5

# Java 的包机制

其实就是文件夹

  • 一般用公司域名倒置作为包名
  • package 必须放在最上面
  • 导入包 import
  • .* 通配符导入这个包下所有的类

# Java 的流程控制

  • 用户交互输入 Scanner 类 ctrl + 右键访问

import java.util.Scanner

Scanner s = new Scanner(System.in);

next () 与 nextLine () 方法获取输入的字符串

next () 不能得到带有空格的字符串

nextLine 可以

用 hasNext () 与 hasNextLine () 判断 是否还有输入的东西

还有 nextFloat () nextInt ()

输入:hello world

输出:hello

改用 nextLine 方法后得到完整输出

package zone.mashiro.base;
import java.util.Scanner;
/**
 * @author yuan
 * @version 1.0
 * @since 1.8
 */
public class Demo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);// 接收键盘输入
        System.out.println("使用next方式接收:");
        // 判断用户有没有输入字符串
        if (scanner.hasNext()){
            String str = scanner.next();// 程序会等待输入完毕
            System.out.println("输出的类容为:"+str);
        }
        //io 流的类如果一直不关闭会一直占用资源,用完就关
        scanner.close();
    }
}
  • 顺序结构:从上到下依次运行,按照顺序依次执行

  • if 单 / 多选择结构

  • switch case break default (可选)// 可以是字符串,通过 hashcode 比较、

  • while 循环结构

  • do while : 与 while 的区别在于 while 先判断后执行,dowhile 是先执行后判断,所以 dowhile 会被至少执行一次

  • for ;隔开初始化值,条件判断,迭代

  • 100.for 生成

  • 增强 for 循环:

  • continue:跳过某次循环

    int[] numbers={10,20,30}
    fot(int x:number){
        System.out.println(x);// 遍历数组元素
    }

# 反编译 java 文件

  • 字节码文件 ---- 反编译

# 简单的 debug

先打一个断点,点小虫的符号

# 数学函数

public class MathDemo {
  public static void main(String[] args) {
    
    double value = Math.random();
    System.out.println(value);
    // 把随机的结果 * 10 得到 1-10 之间的随机数
    int newValue = (int) (value * 10);
    System.out.println(newValue);
    
  }
}

产生 0-9 的随机数

# 何谓方法

  • 方法是解决一类问题的步骤的有序集合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用
  • 一个方法只做一个功能

# 方法

虽然 main 方法有特殊的含义它是程序执行的入口,如果要执行代码就必须要有 main 方法 main 函数可以命令行传参

// 固定的方法格式,main 方法用于启动程序
public static void main(String[] args){
}
//public(公共的) static(静态) void(空类型)
public static void 方法名称(方法参数){
  代码块
}

方法的参数分为实际参数,和形式参数。

  • 形式参数:定义方法时写的参数。
  • 实际参数:调用方法时写的具体数值。

# 值传递与引用方法

在数据做为参数传递的时候,基本数据类型(包括包装类,如 Integer)是值传递,引用数据类型是引用传递(地址传递)。

在引用传递的时候如果没有更改地址中变量的内容的话,而是把变量指向一个新的地址,则原来的参数变量依旧指向原来地址中的内容。

针对字符串 String 会存在特殊的地方,因为其是不可变的,因此,在函数中对 String 变量赋值也是把新的 String 对象地址赋值给实参,这样原来变量的内容这不会发生变化。

# 方法的重载

方法名称相同,参数列表同(个数不同,类型不同,参数排列顺序不同)

方法的返回值类型可以形同可以不同

# 可变参数

public void test(int... i)

test(...i:1,2,3,4,5,6)

# 递归方法

image-20210311111728692

package zone.mashiro.base;// 计算阶乘
public class Digui {
    public static void main(String[] args) {
        System.out.println(f(5));
    }
    public static int f(int n){
        if(n==1){
            return 1;
        }
        else return n*f(n-1);
    }
}

注意递归的终止条件

# 数组

  • 利用 Java 声明数组
int[] nums;//java 风格
int num[];//c++ 风格
nums=new int[10]

arrays.length

image-20210311113806043

  • 数组初始化
  • 静态初始化 int[] nums={1,3,4,5};
  • 动态初始化 int[]b=new int[10] 有默认值

image-20210311114730436

  • 数组也是对象,数组的元素相当于对象的成员变量

  • 数组的长度不可变

  • 数组作为参数和返回值

  • 二维数组

# Java array 类

数组的工具类

Arrays.sort()

# 稀疏数组

当一个数组中大多数元素为同一值时,可以使用稀疏数组来保存该数组,从而缩小程序的规模

先压缩后还原。