JavaSE

JavaSE基础

Java发展和环境搭建

Java发展史

  • 91年sun公司开发OAK项目,开发Java跨平台的语言 ("write once,run anywhere")

  • 95年 互联网爆发 Java语言诞生

  • 09年左右 Oracle公司收购SUN公司(74亿元)

  • 目前为止,Java语言也是市场占用率较高的语言(Web开发BS架构)

    JAVA之父:詹姆斯高斯林

Java版本

  • JavaSE: Java基础开发方向,Java的核心

  • JavaEE: 企业开发应用

  • JavaME: 移动设备,嵌入式设备

  1. 2004年,J2SE 5.0 (1.5.0) Tiger老虎 引入泛型;增强循环,可以使用迭代方式;自动装箱与自动拆箱;类型安全的枚举;可变参数;
  2. 2011年,J2SE 7 Dolphin海豚 switch语句块中允许以字符串作为分支条件;在创建泛型对象时应用类型推断;在一个语句块中捕获多种异常;
  3. Java 8=JDK1.8(2014)

5的新特性

1、泛型 Generics:**

2、枚举类型 Enumeration:

3、自动装箱拆箱(自动类型包装和解包)autoboxing & unboxing:

4、可变参数varargs(varargs number of arguments)

5、Annotations 它是Java中的metadata(注释)

6、新的迭代语句(for(int n:numbers))

7、静态导入(import static )

8、新的格式化方法(java.util.Formatter)**

7的新特性

1,switch中可以使用字串2.运用List tempList = new ArrayList<>(); 即泛型实例化类型自动推断3.语法上支持集合,而不一定是数组4.新增一些取环境信息的工具方(IO临时文件夹,JRE安装目录)5.Boolean类型反转,空指针安全,参与位运算6.两个char间的equals 7.安全的加减乘除

8新特性举例

Lambda 表达式

函数式接口

Stream 接口

特性和优势

  • 简单性
  • 面向对象
  • 可移植性 “一次编写,随处运行”:“write once, run anywhere”
  • 高性能
  • 动态性
  • 多线程
  • 安全性
  • 健壮性

Java软件的基本组成

JDK

JDK(Java SE Development Kit),Java标准开发平台,它提供了编译、运行Java程序所需的各种工具和资源 .java文件
在这里插入图片描述

JRE

JRE( Java Runtime Environment) 、Java运行环境,用于解释执行Java的字节码文件。 .class

JVM

JVM(Java Virtual Mechinal),Java虚拟机,是JRE的一部分。

​ 它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。

​ 所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。

​ 跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUdc8Dlg-1669296140049)(C:\Users\wanggang\AppData\Roaming\Typora\typora-user-images\1669031998078.png)]
程序执行过程:软件开发中没有啥业务需求不是通过增加一层不能解决的,如果一层不够,加两层

Java环境安装

  • 前置知识点
    在这里插入图片描述

安装:建议安装目录不要使中文,单独选址安装,检查版本

安装前
在这里插入图片描述
在这里插入图片描述

安装后

打开dos窗口(Disk Operation System)

打开DOS命令行

唤醒运行窗口win + r
在这里插入图片描述

输入cmd.进入
在这里插入图片描述

[

测试是否安装成功

java - version
在这里插入图片描述

==注意:如果没有环境变量,只能在JDK的安装目录使用命令

在这里插入图片描述

打开环境变量
在这里插入图片描述

添加path的环境变量
在这里插入图片描述

新建-设置JAVA_HOME
在这里插入图片描述

配置Path
在这里插入图片描述
搞定收工

补充知识点:

命令主要分为:

  • 内部命令:操作系统内置的
  • 外部命令:通过安装之后
  • 批处理命令: .bat

⭐环境变量的配置核心目标是:就是将安装的可执行程序,变成对应的外部命令,让其可以通过命令行进行操作

环境变量的配置:

​ 目的:为了能够在任意路径下使用javac.java等命令;path:%JAVA_HOME%\bin

​ 目的:1为了不频繁操作path 2未来安装tomcat内容时默认查找本地JAVA_HOME

寻址过程:

在这里插入图片描述

常用的DOS命令

1.内部命令(系统自带的,可以使用命令)
2.外部命令(安装应用程序时,自动设置到系统环境中的命令)
3.批指令  (批量处理一些操作的指令)
>help
# 查看系统中所有的内部命令

>help 命令名
#查看制定命令的使用方式

>help dir
#查看dir的使用方式

>dir
#显示当前路径下的目录

>dir [/A:h /O:s]
#/A属性,表示隐藏文件;/O排序方式,s表示文件大小排序
#查看当前路径下所有的隐藏文件夹,并按大小排序
#dir[/属性1:属性值1][/属性2:属性值2]

>cd
#查看当前目录或更改目录

>cd.
#查看当前目录

>cd..
#查看当前目录的上一级目录(父目录)

>cd [path]
#更改目录到指定路径

>md 文件夹名
#创建文件夹
>md a\b
#在当前目录下创建a文件下,并在a文件夹下创建b文件夹

rd[path]文件夹名
#删除当前路径/制定路径下的文件夹

>rd a
#如果a文件夹下有子目录,则不能删除

>rd /s a
#删除a文件夹及其子目录(需手动确认)

>rd /s /q a
#删除a文件夹及其子目录(不需要确认)

>md a\b
>cd a\b
>copy con wb.txt(加回车键然后换行输入文本内容)
#在a文件夹里b文件中创建一个txt文件并输入内容,最后用Ctrl + c退出
Tab自动填充
↑↓再次寻找使用过的命令,↑向前找,↓向后找
cls 清空屏幕
exit 退出

☆第一个Java程序

  • 新建一个文件,修改文件后缀名.java,文件名任意(千万记得显示文件扩展名)

    注意:不建议使用中文,每个单词的首字母大写,其他小写,比如HelloWorld

  • 编写程序java文件的内容

    注:String[] args 与String args[]都可以执行,但推荐使用前者,可避免歧义与误读

    public class HelloWorld{
        public static void main(String[] args){
            System.out.println("HelloWorld!!!");
        }
    }
    
  • 编译.java文件javac HelloWorld.java

  • >javac HelloWorld.java
    

    注意:编译时,当前所在目录要与.java文件同级,否则需要设置文件的全路径

    比如:

在这里插入图片描述

  • 解释.class字节码文件

  • >java HelloWorld
    

    注意:编译时,当前所在目录要与.class文件同级,否则需要通过-cp设置文件的全路径

如果遇到编码问题,用-encoding UTF-8选项设置来编译

常见问题

-pulic 一个修饰符,表示公共的,共有的,public修饰的class称为主类
-Class 表示java语言中的类 `public class 类名{}`
-public static void main(String[] args)是每一个Java程序的入口
-args 可以看出它是一个数组,args[0]传入的第一个参数
  -public 公共的
  -static 静态的
  -void   无返回值
  -main   主方法
  -String[] args 从控制台接收参数

代码解释

public class HelloWorld{ //此时的类名必须与文件名一致
    public static void main(String[] args){ //程序的入口
        System.out.println("HelloWorld!") //以分号结尾
    }
}
  • 拓展:dll文件的作用
    • DLL 是 Dynamic Link Library 的缩写, 意为动态链接库。
    • DLL 是一个包含可由多个程序同时使用的代码和数据的库。通过使用 DLL, 程序可以实现模块化, 由相对独立的组件组成。可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。 dII 文件在程序中的最大作用是加速程序运行。
    • 1、静态调用方式:由编译系统完成对 DLL 的加载和应用程序结束时 DLL 卸载的编码(如还有其它程序使用该 DLL,则 Windows 对 DLL 的应用记录减1,直到所有相关程序都结束对该 DLL 的使用时才释放它,简单实用,但不够灵活,只能满足一般要求。
    • 动态调用方式:是由编程者用 API 函数加载和卸载 DLL 来达到调用 DLL 的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。

JavaSE基础语法

标识符

  • 3个规则

    • 标识符 标识符以字母/下划线/美元符号开头,后面可以是字母/下划线/美元符号/数字组成.不能以数字开头
    • 标识符不能是关键字
    • 标识符严格区分大小写
  • 2个规范

    • 见名知意
    • 驼峰规则
  • 1个注意

    • JAVA不采用通常语言使用的ASCⅡ字符集,而是采用unicode这样的标准国际字符集.因此,这里的字母的含义:英文/汉字等等
abstractAssertbooleanbreakbytecase
catchchar(character)classconstcontinuedefault
doDoubleelseextendsfinalfinally
floatForgotoifimplementsimport
instanceofIntinterfacelongnativenew
nullPackageprivateprotectedpublicreturn
shortStaticstrictfpsuperswitchsynchronized
thisThrowthrowstransienttryvoid
volatileWhile

不能使用关键字作为变量名或方法名,Java关键字是Java语言保留供内部使用的

注释

注释是对书写内容的解释和说明。是程序员为读者作的说明,是提高程序可读性的一种手段。我们写的代码是给机器执行的,也是给人看的,在很多时候需要添加一些必要的说明,提示读者,这些说明并不会对代码产生任何影响,也不需要执行。则使用程序中的注释来实现。

变量

程序运行期间,其值可以发生改变的容量,称为变量.

我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放置什么值不确定

变量的声明和使用

变量三要素:数据类型,变量名,生命周期(作用范围);

  1. 变量一定要先声明再初始化,然后才能使用,声明和初始化可以分开也可以写在一行;
  2. Java 中,同一个作用域内,不能定义重名变量;
  3. 变量的值是可以随便修改的;
数据类型

在这里插入图片描述

数据类型占用空间表数范围tips
byte字节型1字节B[-128,127]存储范围有限,小心赋值,一般用来表状态
short短整型2字节2B[-32768,32767]Java中没有无符号类型
int整形4字节4B±21亿
long长整型8字节8B很大很大63次方字面值默认为int,如果强赋值,需加L或l
double双精度8字节15-16位如果运算,扩大倍数,缩小倍数;BigDecimal
float单精度4字节6-7位小数默认double型,强赋值需要加F或f
boolean布尔B?b?4B?false true
char字符型2B单引号的单个字符正整数,unicode代码点赋值,可四则运算

转义字符:

  • \b 退格
  • \n 换行
  • \t 制表符位
  • \r 行头

类型转换:

  • 小变大,自动转:四则运算,自动向大类型转换;boolean类型不能参与四则运算,且boolean类型
    无法进行类型转换。
  • ​ char
    ​ ↓
    byte->short->int->long->float->double
  • 强制类型转换:大变小,需强转
    • 强转有风险,但是可控(已知风险),数据可能损失
    • byte short char在赋值时,如果字面没超过对应数据类型范围,可正常赋值,
    • 四则运算中出现变量,一定会出现类型转换,如果都是字面值,编译器会进行常量折叠计算字面值

小数在计算机中的存储方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常量

程序运行期间,其值不可以发生改变.通过final修饰的变量,为常量.

class test11{
    public static void main(String[] args){
            final double PI = 3.14;
        System.out.println(PI);
    }
}

命名规则

所有变量、方法、类名:见名知意
成员变量:首字母小写和驼峰原则 : monthSalary
局部变量:首字母小写和驼峰原则
常量:大写字母和下划线:MAX_VALUE
类名:首字母大写和驼峰原则: Man, GoodMan
方法名:首字母小写和驼峰原则: run(), runRun()

运算符

Java 语言支持如下运算符:
算术运算符: +,-,*,/,%,++,–
赋值运算符 =
关系运算符: >,<,>=,<=,==,!=, instanceof
逻辑运算符: &&,||,!
位运算符: &,|,^,& , >>,<<,>>> (了解!!!)
条件运算符 ?:
扩展赋值运算符:+=,-=,=,/=

一元运算符

++(自增),–(自减),了解一个,另一个含义相同
++ 基本含义:在整型变量原来值的基础上增加 1,然后赋值给当前变量
++i(前导自增): 先将变量的值增加 1 , 赋值给自己,再进行其他运算
i++ (后导自增):先取出变量的值使用,然后再将变量的值增加 1, 赋值给自己

int a = 5;
int b = a++;  //先给b赋值,再自增,执行完b=5,a=6
int c = ++a;   //先自增再给c赋值,执行完c=7,a=7

注意:java中的乘幂处理

//int a = 3 ^2;  //java不可以,^是异或符号
double b = Math.pow(3,2);

Math类提供了很多科学和工程计算需要的方法和常数。

逻辑运算符
位预算符

~ : 按位取反
& : 按位与
| : 按位或
^ : 按位异或
<< :左移运算符

…>>右移运算符

:>>>无符号移位运算符

右移一位相当于除2取商。
左移一位相当于乘2

扩展运算符
条件运算符
三目条件运算符
        int score = 80;
        int xy = -100;
        String type = score < 60 ? "不及格":"及格";
        int fl = xy > 0? 1 :(xy == 0 ? 0 : -1);
        System.out.println("type=" +type);
        System.out.println("fl=" +fl);
        //type=及格
//fl=-1
运算符优先级

单目乘除位运算,逻辑三目后赋值

大家不需要去刻意的记住他,表达式里面优先使用 小括号来组织!!

类型转换

自动类型转换
  • 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。
  • 特例: 可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
强制类型转换
  • 强制类型转换(Cast): 强制类型转换,又被称为造型,用于显式的转换一个数值的类型. 在有可
    能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
  • 强制类型转换的语法格式: (type)var ,运算符“()”中的type表示将值var想要转换成的目标数据类
    型。

两个工具

随机生成

Math 类提供了一个名叫 random 的方法, 可以随机生成 [0,1) 之间的任意double类型的数据。

  • 通过扩大和平移可以生成任意区间的数据

  • 通过强转可将小数取整

键盘录入

键盘录入可以允许用户在程序运行过程中向程序输入数据,达到人机交互的效果,提高用户体验度。
但是需要进行一些额外的操作,后面会具体解释

  1. 导包 ( import java.util.Scanner; ) 告诉程序这个工具在何处
  2. 创建对象( Scanner sc = new Scanner(System.in); ) 创建工具
  3. 获取数据 ( int num = sc.nextInt(); ) 使用工具获取数据
import java.util.Scanner;
public class Test{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年龄");
        int age = sc.nextInt();
        System.out.println(age);
    }
}

package com.sh.utils02;
import java.util.Scanner;
/*
    基本数据类型 :
        基本数据类型 变量名 = 数据值;

    引用数据类型 :
        1.导包
            作用 : 指明要使用的引用数据类型的位置
            语法 : 通过import导包
            写法 : import 权限定名(包名.类名);
            位置 : 类class的上面 包信息package的下面
        2.创建引用数据类型的引用(对象)
            引用数据类型 变量名|引用 = new 引用数据类型();
        3.使用功能
            引用.功能名字();

    Scanner : 接收用户键盘输入的内容
        1.导包
            import java.util.Scanner;
        2.创建Scanner类型的引用
            Scanner sc = new Scanner(System.in);
        3.使用功能
            sc.nextByte()
            sc.nextShort()
            sc.nextInt()  接收用户键盘输入int类型数据,从有效字符开始,遇到enter键结束功能
            sc.nextLong()
            sc.nextFloat()
            sc.nextDouble()
            sc.next() 接收用户输入的字符串数据,从有效字符开始接收,遇到enter键结束功能,如果在接收的过程中一旦遇到空格,tab...就停止接收
            sc.nextLine() 接收用户输入的一整行内容,可以接收空格,直到遇到enter结束功能
       4.关闭
            sc.close() 当前类中使用完毕Scanner最好关闭使用资源
 */
public class Class001_Scanner {
    public static void main(String[] args) {
        //1)导包
        //2)创建Scanner类型的引用
        Scanner sc = new Scanner(System.in);
         //3)使用功能
        System.out.println("请输入你的年龄:");
        int age = sc.nextInt();
        System.out.println(age);
        System.out.println("请输入你的月薪:");
        double sal = sc.nextDouble();
        System.out.println(sal);
        System.out.println("请输入你的姓名:");
        String name = sc.next();
        System.out.println(name);

        //处理之前next功能遗留的数据+enter
        sc.nextLine();

        System.out.println("请输入你的用户名:");
        String username = sc.nextLine();
        System.out.println(username);

        //关闭
        sc.close();
    }
}

控制语句

控制语句就是掌握程序的流向,使程序按业务逻辑目的运行的代码。即用来实现对程序流程的选择、循环、转向和返回等进行控制。
从结构化程序设计角度出发,程序有三种结构: 顺序结构 , 选择结构 , 循环结构

switch选择
switch :定值判断
        语法 :
            switch(表达式|变量){
                case1:
                    语句体1;
                    break;
                case2:
                    语句体2;
                    break;
                ...
                default:
                    语句体n;
                    break;
            }
        执行流程 :
            1.执行()中的表达式,拿结果值|变量的值,
            2.case后面定值进行判断是否相等,如果存在多个case从上到下依次判断
            3.如果相等,执行对应的语句体,如果不相等继续往下判断
            4.执行完毕语句体值,如果遇到break结束switch语句结果
            5.如果以上所有的case都不满足,如果存在default,执行语句体n

        详解 :
            1.switch语句中()中的内容,表达式的结果类型|变量的类型只能为 : 		              byte,short,int,char,String(jdk1.7),枚举(jdk1.5)
            2.break 终止结束switch语句
                    如果没有添加break,会发生case穿透
                    case穿透 : 当找到值相等case,执行对应的语句体,语句体执行完毕,没有遇到break,会继续向下穿透,下面的case不在判断,继续执行语句体,直到遇到下一个break或者switch语句的结束而结束
            3.default : 所有的case后面的值与()中结果都不相等时,执行default后的内容-->相等else可以定义在switch语句任意位置一般在最后定义的default后面的break可以省略,但是在其他位置定义default后面break不能省略;
      2.与case后面定值进行判断是否相等,如果存在多个case从上到下依次判断
        3.如果相等,执行对应的语句体,如果不相等继续往下判断
        4.执行完毕语句体值,如果遇到break结束switch语句结果
        5.如果以上所有的case都不满足,如果存在default,执行语句体n

    详解 :
        1.switch语句中()中的内容,表达式的结果类型|变量的类型只能为 : 		             
         byte,short,int,char,String(jdk1.7),枚举(jdk1.5)
        2.break 终止结束switch语句
                如果没有添加break,会发生case穿透
                case穿透 : 当找到值相等case,执行对应的语句体,语句体执行完毕,没有遇到break,会继续向下穿透,下面的case不在判断,继续执行语句体,直到遇到下一个break或者switch语句的结束而结束
        3.default : 所有的case后面的值与()中结果都不相等时,执行default后的内容-->相等else可以定义在switch语句任意位置一般在最后定义的default后面的break可以省略,但是在其他位置定义default后面break不能省略;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值