java笔记1

位(bit):一个数字0或者一个数字1,代表一位

字节(bite):每逢8位是一个字节,这是数据存储的最小单位

1KB = 1024byte

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

命令提示符(cmd) 启动win + R

命令提示符的常用命令:

切换盘符大小写不区分

cd … 回到上一级文件夹

cd 文件名\文件名\文件名 到这个文件夹

查看当前内容 dir

清屏 clear

退出 exit

第二章: java语言开发环境搭建

JDK是java程序开发工具包,包含JRE和开发人员的使用工具,JRE包含JVM核心

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7K6w6jr-1612831449223)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210105160139703.png)]

public class HelloWorld{
	public static void main(String[] args) {
		System.out.println("hello world");
	}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbUiUm1b-1612831449227)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210105170026198.png)]

两个单引号之间必须有且仅有一个字符,没有不行

空常量不能用来打印输出

基本数据类型(整数型、浮点型、字符型、布尔型)

引用数据类型(字符串、数组、类、接口、lambda)

变量:程序运行期间,内容可以发生改变的量

数据类型 变量名称 = 数据值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55DBcnqr-1612831449228)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210105171515294.png)]

数据类型转换

当数据类型不一样时 将会发生数据类型转换

自动类型转换(隐式)

1.特点:代码不需要进行特殊处理,自动完成

2.规则:数据范围从小到大

public class Demo01Const {
	public static void main(String[] args) {
		System.out.println(1024); // 这就是一个整数 默认就是int类型
		System.out.println(3.14); // 这就是一个浮点数 默认就是double类型
        // 左边是long类型 右边是默认的int类型 左右不一样
		long num1 = 100L;
		System.out.println(num1); //100
        
        double num2 = 2.5F;
        // 范围float更大一些 符合从小到大规则
        float num3 = 30L;
	}
}

强制类型转换(显式)

1.特点:代码需要进行特殊的格式处理 不能自动完成

2.格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据

public class Demo01Const {
	public static void main(String[] args) {
		// 左边是int类型 右边是long类型
		int num = (int)100L;
		System.out.println(num);
	}
}

注意事项:

1.强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出

2.byte/short/char这三种类型都可以发生数学运算,例如加法“+”

3.byte/short/char这三种类型在运算的时候,都会被首先提升成int类型,然后再计算

4.boolean类型不能发生数据类型转换

计算机的底层都是数字

一旦char进行了数学运算

运算符

运算符:进行特定操作的符号,例如 :+

表达式:用运算符连起来的式子叫做表达式,例如:20+5 又例如:a+b

四则运算当中的加号+有常见的三种用法:

1.对于数值来说就是加法

2.对于char类型来说,在计算之前会被提升成为int,然后再计算

3.对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作

任何数据类型类字符串进行连接的时候,结果都会变成字符串

与(并且) && 全部是true 才是true 否则就是false

或(或者) || 至少一个是true 就是true 全都是false 才是false

非 (取反)| 本来是true 变成false 本来是false 变成true

与&& ,或|| 具有短路效果,如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能

一元运算符:只需要一个数据就可以进行操作的运算符,例如:取反,自增自减

二元运算符:

三元运算符:

方法入门

定义一个方法的格式:public static void 方法名称() {

​ 方法体

}

方法名称的命名规则和变量一样,使用小驼峰

注意事项:

1.方法定义的先后顺序无所谓。

2.方法的定义不能产生嵌套包含关系。

3.方法定义好了不会执行,如果要执行一定要调用

如何调用方法:方法名称();

JShell脚本工具

JDK9的特点:jshell是JDK9特有的

启动jshell: jshell

退出:/exit

扩展知识点

在给变量进行赋值的时候,如果右边的表达式中全部都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。

short result = 5+9;

等号右边全都是常量,没有任何变量参与运算

编译之后,得到的.class字节码文件当中相当于直接就是:short result = 14

这称为“编译器的常量优化”

但是注意:一旦表达式中有变量参与,那么就不会进行这种优化了

流程控制语句

流程控制

顺序结构

判断语句

if(关系表达式){

​ 语句体1;

}else if(判断条件){

​ 语句体2;

}else{

​ 语句体3;

}

选择语句

switch语句使用注意事项:

1.多个case后面的数值不可以重复

2.switch后面的小括号中只能是下列数据类型:

基本数据类型:byte/short/char/int

引用数据类型:String字符串、enum枚举

3.switch语句格式可以很灵活:前后顺序可以颠倒,而且break语句还可以省略。

匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。

switch(表达式) {

​ case 常量值1:

​ 语句体1;

​ break;

case 常量值2:

​ 语句体2;

​ break;

default:

​ 语句体3;

​ break;

}

循环语句

循环结构的基本组成部分,一般可以是四个部分:

1.初始化语句:在循环开始执行,而且只做唯一的一次

2.条件判断:

3.循环体:

4.步进语句:每次循环之后都要进行的扫尾工作,每次循环都要进行一次。

for(初始化表达式;布尔表达式;进步表达式){

​ 循环体;

}

while循环有一个标准格式,还有一个扩展格式

标准格式:

while(条件判断){

​ 循环体;

}

扩展格式:

while(条件判断){

​ 循环体;

​ 步进语句;

}

do…while()循环

标准格式:

do{

​ 循环体

}while(条件判断);

扩展格式:

do{

​ 循环体;

​ 步进语句;

}while(条件判断);

break关键字的用法有常见的两种:

1.可以用在switch语句中,一旦执行整个switch语句立刻结束。

2.还可以用在循环语句中,一旦执行,整个循环语句立刻结束,打断循环

关于循环的选择,有一个小建议:

凡是次数确定的场景多用for循环,否则多用while循环。

另一种控制语句是continue关键字。

一旦执行,立即跳过当前次循环剩余内容,马上开始下一次循环

扩展知识点:

1.死循环

2.嵌套循环

开发工具IntelliJ IDEA

IDE 集成开发环境

IDEA的项目结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tepe2Klr-1612831449230)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210106101557479.png)]

file - > project - > empty project - > next - > 起一个项目名字 - > finish - > 弹出一个框Project Structure -> 点击侧边的Modules -> 点击加号+弹出一个弹框选择New Module - > next - > Module name取名字

所有的源代码都要写在src中

选中src右键选择package-> 给包取一个名字cn.itcast.day04.demo01

这是一个多层级文件夹的嵌套

点击cn.itcast.day04.demo01右键选择new-> java class,这样就可以新建一个类文件

建demo02也是点击src右键新建

快捷键:psvm自动生成main函数

输出语句快捷键:sout

弹出运行框快捷键:alt + 4

IDEA常用快捷键:

alt + enter 导入包 自动修正代码

Ctrl + Y 删除光标所在行

Ctrl + D 复制光标所在行的内容 插入光标位置下面

Ctrl + atl + L 格式化光标

Ctrl + / 单行注释 再按取消注释

Ctrl + shift + / 选中代码注释 多行注释 再按取消注释

alt + Ins 自动生成代码 toString, get, set等方法

alt + shift + 上下箭头 移动当前代码行

for循环的快捷键 循环的次数.fori

方法

for循环的快捷键 循环的次数.fori

使用方法的时候注意事项:

1.方法应该定义在类当中,但是不能在方法当中定义方法

2.方法定义的前后顺序无所谓

3.如果方法有返回值,那么必须写上return 返回值 不能没有

4.return后面的返回值数据,必须和方法后面的返回值 只能写return自己

5.一个方法中可以有多个return语句,但是必须保证同事只有一个会被执行到,两个return不能连写

重载

方法的重载(overload):多个方法的名称一样,但是参数列表不一样

好处:只需要记住一个方法名称就可以实现类似的功能

方法重载与下列因素相关:

1.参数的个数不同

2.参数的类型不同

3.参数的多类型顺序不同

方法重载与下列因素无关:

1.与参数的名称无关

2.与方法的返回类型无关

数组

数组的概念:是一种容器,可以同时存放多个数据值

数组的特点:

1.数组是一种引用数据类型

2.数组当中的多个数据,类型必须统一

3.数组的长度在程序运行期间不可改变

数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值

两种常见的初始化方式:

1.动态初始化(指定长度)

动态初始化数组的格式:

数据类型 [] 数组名称 = new 数据类型[数组长度];

解析含义:

左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型

左侧的中括号:代表我是一个数组

左侧的数组名称:给数组取一个名字

右侧的new:代表创建数组的动作

右侧数据类型:必须和左边的数据类型保持一致

右侧中括号的长度:也就是数组当中,到底保存多少个数据,是一个int数字

2.静态初始化(指定内容)

静态初始化基本格式:

数据类型[] 数组名称 = new 数据类型[] {元素1,元素2,。。。}

静态初始化省略格式:

数据类型[] 数组名称 = {元素1,元素2,。。。}

注意事项:

虽然静态初始化没有直接告诉长度,但是根据大括号里面元素的具体内容,也可以自动推算出来长度

直接打印素组名称,得到的是数组对应的:内存地址哈希值。

使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值,规则如下:

整数类型,默认0

浮点类型,默认0.0

字符类型,默认’\u0000’

布尔类型,默认false

引用类型,默认null

获取数组的长度:

格式:

数组名称.length

这样会的到一个int数字,代表数组的长度

数组一旦创建程序运行期间,长度不可改变

数组遍历输出:

java的内存需要划分

java的内存需要划分为5个部分:

1.栈(stack):存放的都是方法中的局部变量。方法运行一定要在栈当中运行。

局部变量:方法的参数,或者是方法()内部的变量

作用域:一旦超出作用域,立刻从栈内存中消失

2.堆(Heap):凡是new出来的东西,都在堆当中。

堆内存里面的东西都有一个地址值:16进制

堆内存里面的数据,都有默认值。规则:

如果是:

整数类型,默认0

浮点类型,默认0.0

字符类型,默认’\u0000’

布尔类型,默认false

引用类型,默认null

3.方法区(Method area):存储class相关信息,包含方法的信息

4.本地方法栈(Native Method Stack):与操作系统相关。

5.寄存器(pc Register):与CPU相关

一个数组的内存图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PSisTJGD-1612831449232)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210106161912033.png)]

两个数组的内存图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vGrkf5M5-1612831449233)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210106162309975.png)]

两个引用指向同一个数组的内存值:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZlia4lf-1612831449234)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210106162815536.png)]

数组索引越界异常

ArrayIndexOutOfBoundsException

原因:索引编号写错了

当一个对象作为参数 传递到方法当中时

实际上传递进去的是对象的地址值

局部变量和成员变量:

1.定义的位置不一样

局部变量:在方法的内部

成员变量:在方法的外部 直接写在类当中

2.作用范围不一样

局部变量:只有方法当中才可以使用,出了方法就不能再用

成员变量:整个类全部都可以通过

3.默认值不一样

局部变量:没有默认值,如果要想使用 必须手动进行赋值

成员变量:如果没有赋值 会有默认值 规则和数组一样

4.内存的位置不一样

局部变量:位于栈内存

成员变量:位于堆内存

5.生命周期不一样

局部变量:随着方法进战而诞生 随着方法出栈而消失

成员变量:随着对象创建而诞生 随着对象被垃圾回收而消失

面向对象三大特性

封装性

封装性在java中的体现

1.方法就是一种封装

2.关键字private也是一种封装

private关键字可以提高代码的安全性

this:

* 当方法的局部变量和类的成员变量重名的时候,根据就近原则,优先使用局部变量
* 如果需要访问本类当中的成员变量,需要使用格式:
* this.成员变量名
* 
* 通过谁调用的方法,谁就是this

继承性

多态性

java学到什么程度可以做项目:

javase:

java基础篇:

流程控制(顺序、选择、循环)

面向对象思想(封装、继承、多态(类、接口、对象))

数组、集合(Array、List、Set、Map)

java常用API(日期Date(java8:LocalDateTime、LocalDate)、常用数据类型的封装类(Integer、String…))

IO流(项目中涉及到文件操作)

多线程(偏向开发并发量大的功能)

异常处理(了解一些常见的异常,方便我们对程序进行排错定位)

反射、代理(偏向底层原理、或高级架构)

注解(侧重于使用框架为我们提供的注解)

java网络编程(了解一些网络协议、基础知识。Http协议…)

数据库相关:

数据库管理系统的使用

常见的数据库管理系统比如mysql,oracle

最起码要会使用数据库查询语言(DQL)、数据操纵语言(DML)、数据定义语言(DDL)

数据库视图化管理工具(Windows系统上的SQLyog、NAVcat)

java中的JDBC API

此时 学完java基础 数据库 JDBC之后可以尝试写一个控制台应用,实现对数据库的单纯的增删改查

前端:

JavaEE:

Servlet(它的生命周期、get和post请求的处理、请求和响应)

Servlet容器(Tomcat、JBoos、Jetty…)

模板引擎(JSP配合使用EL表达式、JSTL标签。ThymeLeaf、FreeMarker…)

MVC三层框架(模型、视图、控制)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1S2wk6HH-1612831449235)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210107103622830.png)]

一个基于Servlet的web应用的工程包(各个包之间的调用关系,遵循MVC框架模式)

使用框架来优化升级项目(学习一个框架先要了解这个框架干嘛用的,如果你写过一个项目,那么要想这个框架主要作用在原来的那一部分):Spring框架:SpringMVC框架:主要应用在控制层

框架的搭配使用:

Spring+SpringMVC+MyBatista = SSM

SpringBoot + Mybatis = SM(比较热门的,后端的微服务)

构造方法

构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法

格式:

public 类名称(参数类型 参数名称){

​ 方法体

}

注意事项:

1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样

2.构造方法不要写返回值类型,连void都不写

3.构造方法不能return一个具体的返回值

String
package cn.itcast.day06.String;

/*
 * API当中说 Java程序中的所有字符串字面值(如:“abc”)都作为此类的实例实现
 * 其实就是说 程序当中所有的双引号字符串 都是String类的对象(就算没有New 也照样是)
 *   特点:
 *   1.字符串的内容永不可变
 *   2.正是因为字符串不可改变 所以字符串可以共享8使用
 *   3.字符串效果上相当于char[]字符数组 但是底层原理是byte[]字节数组
 *
 * 三种构造方法:
 * public String():创建一个空白字符串 不含有任何内容
 * public String(char[] array):根据字符数组的内容 来创建对应的字符串
 * public String(byte[] array):根据字节数组的内容 来创建对应的字符串
 * 一种直接创建:
 *String str = "Hello"
 *
 * 注意:直接写上双引号 就是字符串对象
 * */
public class Demo01String {
    public static void main(String[] args) {
//        1
        String str1 = new String();
        System.out.println("第一个字符串:" + str1);
//        2
        char[] charArray = {'a', 'b', 'c'};
        String str2 = new String(charArray);
        System.out.println("第2个字符串:" + str2);

//        3
        byte[] byteArray = {97, 98, 99};
        String str3 = new String(byteArray);
        System.out.println("第3个字符串:" + str3);

//        4
        String str4 = "Hello";
        System.out.println(str4);


    }
}

字符串常量池:

package cn.itcast.day06.String;
/*
* 字符串常量池:程序当中直接写上的双引号字符串 就在字符串常量池中
*   对于基本类型来说==是进行数值的比较
*   对于引用类型来说 ==是进行地址值的比较
* */
public class Demo02StringPool {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";

        char[] charArray = {'a','b','c'};
        String str3 = new String(charArray);

        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        System.out.println(str3 == str2);
    }
}

比较:

package cn.itcast.day06.String;
/*
* ==是进行对象的地址值比较 如果确实需要字符串的内容比较 可以使用两个方法
* public boolean equals(Object obj):参数可以是任何对象 只有参数是一个字符串并且内容相同的才会给true 否则就是false
* 备注:任何对象都能用Object进行接收
* equals方法具有对称性 也就是a.equals(b)和b.equals.(a)效果一样
*   如果比较双方一个常量一个变量 推荐把常量写在前面
*
*   public boolean equalsIgnoreCase(String str): 忽略大小写 进行内容比较
* */
public class Demo03StringEquals {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        char[] charArray = {'H','e','l','l','o'};
        String str3 = new String(charArray);
        System.out.println(str1.equals(str2));
        System.out.println(str2.equals(str3));
        System.out.println(str3.equals("hello"));

        String strA = "Java";
        String strB = "java";
        System.out.println(strA.equals(strB));
        System.out.println(strA.equalsIgnoreCase(strB));
//      注意:只有英文字母区分大小写 其他都不区分大小写
        System.out.println("abc123".equalsIgnoreCase("abc壹123"));
    }
}

获取字符串

package cn.itcast.day06.String;
/*
* String当中与获取相关的常用方法:
*
* public int length():获取字符串当中含有的字符个数 拿到字符串长度
* public String concat(String str): 将当前字符串和参数字符串拼接成为返回值新的字符串
* public char charAt(int index): 获取指定索引位置的单个字符。(索引从0开始)
* public int indexOf(String str): 查找参数字符串在本字符串中首次出现的索引位置 如果没有返回-1值
*
*
* */
public class Demo04StringGet {
    public static void main(String[] args) {
//        获取字符串长度
        int length = "gxvbendcosm".length();
        System.out.println("字符串的长度是:"+length);

//        拼接字符串
        String str1 = "Hello";
        String str2 = "World";
        String str3 = str1.concat(str2);
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        System.out.println("------------------------------------");

//        获取指定索引位置的单个字符串
        char ch = "Hello".charAt(1);
        System.out.println("在1号索引位置的字符是:"+ch);
        System.out.println("------------------------------------");

//        查找参数字符串在本来字符串当中出现的第一次索引位置
//        如果没有 返回-1
        String original = "helloworld";
        int index = original.indexOf("llo");
        System.out.println(index);
        int index2 = original.indexOf("mm");
        System.out.println(index2);


    }
}

字符串截取:

package cn.itcast.day06.String;
/*
* 字符串的截取方法:
* public String substring(int index):截取从参数位置一直到字符串末尾 返回新字符串
* public String substring(int begin, int end):截取begin开始 一直到end结束 中间的字符串。
* 备注:[begin,end) : 包含左边 不包含右边
*
* */
public class Demo05Substring {
    public static void main(String[] args) {
        String str1 = "HelloWorld";
        String str2 = str1.substring(5);
        System.out.println(str1);
        System.out.println(str2);
        System.out.println("------------------------------");

        String str3 = str1.substring(4,7);
        System.out.println(str3);
        System.out.println("------------------------------");

//        变的是地址值 字符串的内容没有改变
        String strA = "Hello";
        System.out.println(strA);
        strA = "Java";
        System.out.println(strA);
    }
}

字符串转换:

package cn.itcast.day06.String;
/*
* String当中与转换相关的常用方法:
* public char[] toCharArray(): 将当前字符串拆分成为字符串数组作为返回值
* public byte[] getBytes(): 获得当前字符串数组作为返回值
* public String replace(CharSequence oldString, CharSequence newString):
* 将所有出现的老字符串替换成为新的字符串 返回替换之后的结果新字符串
* 备注:charSequence意思就是说可以接受字符串类型
*
*
* */
public class Demo06StringConvert {
    public static void main(String[] args) {
//        转换成字符数组
        char[] chars = "Hello".toCharArray();
        System.out.println(chars[0]);
        System.out.println(chars.length); // 5
        System.out.println("---------------------------");

//        转换成字节数组
        byte[] bytes = "abc".getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
        System.out.println("---------------------------");

        String str1 = "How do you do?";
        String str2 = str1.replace("o","*");
        System.out.println(str2);
        System.out.println("---------------------------");




    }
}

static

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2uXhCqs-1612831449236)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210114104742992.png)]

静态方法中不能使用this关键字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdFp7fYw-1612831449237)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210114112803194.png)]

Arrays
package cn.itcast.day06.arrays;

import java.util.Arrays;

/*
* java.util.Arrays是一个与数组相关的工具类 里面提供了大量的静态方法 用来实现数组的常见操作
*
* public static String toString(数组):将参数数组变成字符串(默认格式:[元素1,元素2,元素3])
* public static void sort(数组):默认按照升序排序
*
*
*
* */
public class Demo01Arrays {
    public static void main(String[] args) {
        int[] intArray = {10,20,30};
//        将int[]数组按照默认格式变成字符串
        String intStr = Arrays.toString(intArray);
        System.out.println(intStr); // [10, 20, 30]

        int[] array1 = {2,1,3};
        Arrays.sort(array1);
        System.out.println(Arrays.toString(array1)); // [1, 2, 3]

        String[] array2 = {"aaa","bbb","ccc"};
        Arrays.sort(array2);
        System.out.println(Arrays.toString(array2));

    }
}

练习题:

package cn.itcast.day06.arrays;

import java.util.Arrays;
/*
* 将一个随机字符串升序排序 再倒序打印出来
* */
public class Demo02ArraysTest {
    public static void main(String[] args) {
        String str = "edrtfgyhvbioijmncoem";
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        for (int i = chars.length - 1; i >= 0; i--) {
            System.out.print(chars[i]);
        }
    }
}

Math
  • java.util.Math类是数学相关的工具类 里面提供了大量的静态方法 完成与数学运算相关的操作
  • public static double abs(double num):获取绝对值
  • public static double ceil(double num):向上取整
  • public static double flow(double num):向下取整
  • public static long round(double num): 四舍五入
  • Math.PI代表近似的圆周率常量
public class Demo01Math {
    public static void main(String[] args) {
//        获取绝对值
        System.out.println(Math.abs(3.14));
        System.out.println(Math.abs(0));
        System.out.println(Math.abs(-3.14));
        System.out.println("------------------------");

//        向上取整
        System.out.println(Math.ceil(3.9));
        System.out.println(Math.ceil(3.1));
        System.out.println("------------------------");

//        向下取整 抹零
        System.out.println(Math.floor(30.1));
        System.out.println(Math.floor(30.9));
        System.out.println(Math.floor(31.0));

        System.out.println(Math.round(3.4));
        System.out.println(Math.round(-2.5));

        System.out.println(Math.PI);

    }
}

练习:

package cn.itcast.day06.math;
/*
* 题目:
* 计算在-10.8到5.9之间 绝对值大于6或者小于2.1的整数有多少个
*
* */
public class Demo02MathPractice {
    public static void main(String[] args) {
        int count = 0;
        double min = -10.8;
        double max = 5.9;
        for(int i = (int)min; i<max; i++) {
            int abs = Math.abs(i);
            if(abs>6 || abs<2.1){
                System.out.println(i);
                count++;
            }
        }
        System.out.println(count);
    }
}

继承

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yefGEmsO-1612831449238)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210114143019171.png)]

继承的格式:

  • 在继承关系中 子类就是一个父类 也就是说 子类可以被当做父类看待
  • 定义父类的格式:(一个普通的类定义)
  • public class 父类名称{}
  • 定义子类的格式:
  • public class 子类名称 extends 父类名称{}

重写:

概念:在继承关系中 方法的名称一样 参数列表也一样

重载:方法的名称一样 参数列表不一样

  • @Override: 写在方法的前面 用来检测是不是有效的正确覆盖重写

  • 这个注释就算不写 只要满足要求 也是正确的方法覆盖重写

  • 子类方法的返回值必须小于等于父类方法的返回值范围

  • 子类方法的权限修饰符必须要大于等于父类方法的权限修饰符

备注:public>protected>(default)>private

default不是关键字default 而是什么都不写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAVwNbaZ-1612831449239)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210114154808269.png)]

抽象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9DwVQDJ-1612831449240)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210114155232793.png)]

  • 抽象方法:就是加上abstract关键字 然后去掉大括号 直接分号结束
  • 抽象类:抽象方法所在的类 必须是抽象类才行 在class之前加上abstract
  • 如何使用抽象类和抽象方法:
  • 1.不能直接创建new抽象类对象
  • 2.必须用一个子类来继承抽象父类
  • 3.子类必须覆盖重新写抽象父类当中的所有抽象方法
  • 覆盖重写(实现):子类去掉抽象方法的abstract关键字 然后补上方法体大括号
  • 4.创建子类对象进行使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJ6Fo2UK-1612831449241)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210114161519483.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eb0ftnMB-1612831449242)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210114162023335.png)]

发红包案例:

User:

package cn.itcast.day06.demosendmoney;

public class User {
    private String name;
    private int money;

    public User() {

    }

//    展示一下当前用户有多少钱
    public void show() {
        System.out.println("我叫:" + name + ", 我有多少钱:" + money);

    }

    public User(String name, int money) {
        this.name = name;
        this.money = money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

Member:

package cn.itcast.day06.demosendmoney;

import java.util.ArrayList;
import java.util.Random;

public class Member extends User {
    public Member() {

    }

    public Member(String name, int money) {
        super(name, money);
    }

    public void receive(ArrayList<Integer> list){
        int index = new Random().nextInt(list.size());
        int delta = list.remove(index);
        int money = super.getMoney();
        super.setMoney(money+delta);

    }
}

Manager:

package cn.itcast.day06.demosendmoney;

import java.util.ArrayList;

//群主的类

public class Manager extends User{
    public Manager() {

    }
    public Manager(String name, int money) {
        super(name,money);
    }

    public ArrayList<Integer> send(int totalMoney, int count){
//        首先需要一个集合用来存储若干个红包的金额
        ArrayList<Integer> redList = new ArrayList<>();

        int leftMoney = super.getMoney();

        if(totalMoney > leftMoney) {
            System.out.println("余额不足!");
            return redList; // 返回空集合
        }

//        扣钱
        super.setMoney(leftMoney - totalMoney);

//        发红包需要平均才分成count
        int avg = totalMoney/count;
        int mod = totalMoney%count;

        for (int i = 0; i < count; i++) {
            redList.add(avg);
        }

        int last  = avg+mod;
        redList.add(last);

        return redList;
    }
}
接口
  • 接口就是多个类的公共规范

  • 接口是引用的数据类型 最重要的内容就是其中的 抽象方法

  • 定义接口的格式:

  • public interface 接口名称{}

  • 如果是java7那么接口中可以包含的内容

  • 1.常量

  • 2.抽象方法

  • 如果是java8:

  • 3.默认方法

  • 4.静态方法

  • 如果是java9,还可以额外包含有:

  • 5.私有方法

  • 在任何版本的java中 接口都能定义抽象方法

  • 格式:

  • public abstract 返回值类型 方法名称(参数列表):

  • 注意事项:

  • 1.接口当中的抽象方法 修饰符必须是两个固定的关键字: public abstract

  • 2.这两个关键字修饰符,可以选择性的省略

接口当中定义常量:

  • 接口当中常量的定义方式:
  • public static final 数据类型 常量名称 = 数据值;
  • 注意:
  • 一旦使用final关键字进行修饰 说明不可变
  • 接口当中的常量可以省略public static final 注意:不写也照样是这样
  • 接口当中的常量必须赋值
  • 接口中常量名称 使用完全大写的字母 用下划线进行分隔
public static final int NUM_OF_MY_CLASS = 10;

在Java9版本中 接口的内容可以有:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TetpjHLE-1612831449243)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121134208015.png)]

package cn.itcast.day06.extendsInterface;

public interface Demo01MyIntreface {
//    static {} 错误写法 接口不能有静态代码块
//    public MyInterface() {} 错误写法 接口不能有构造方法
    /*
    * 使用接口的时候需要注意:
    * 1.接口是没有静态代码块或者构造方法的
    * 2.一个类的直接父类是唯一的 但是一个类可以同时实现多个接口
    * 格式:
    * public class MyInterface implements MyInteraceA, MyInterfaceB{
    *   覆盖重写所有抽象方法
    * }
    *
    *
    * */

}

对象的向上转型和向下转型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WSBse1H7-1612831449244)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121142534757.png)]

instanceof 关键字

格式:

对象 instanceof 类名称

会得到一个Boolean值

final

final 关键字 代表最终的 不可改变的

  • 常见的四种用法:
    1. 可以用来修饰一个类
    1. 可以用来修饰一个方法
    1. 可以用来修饰一个局部变量
    1. 可以同来修饰一个成员变量

当final关键字用来修饰一个类的时候 格式:

  • public final class 类名称{}
  • 含义:当前的这个类不能有任何子类
  • 但是有父类
  • 注意:一个类如果是一个final类 其中的任何成员变量和方法都不能进行覆盖重写
  • 当final关键字用来修饰一个方法的时候这个方法就是最终方法 也就是不能被覆盖重写
  • 格式:
  • 修饰符 final 返回值类型 方法名称(参数列表){}
  • 注意事项:
  • 对于类 方法来说 abstract关键字和final关键字不能同时使用 因为矛盾

一旦使用final用来修饰局部变量 那么这个变量就不能进行修改
final int num1 = 30;
System.out.println(num1);
对于基本类型来说 不可变是变量的值不能改

​ 对于引用类型来说 不可变是指变量的地址值不可改变

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9KNLFh3-1612831449245)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121152204895.png)]

四种权限修饰符

public > protected > (default) > private

同一个类 四种修饰符 都可以访问

同一个包 public protected default 可以访问 private 不可以访问

不同包子类 public protected 可以访问 default private 不可以访问

不同包非子类 public 可以访问 其余不可以访问

局部内部类 都不能写

匿名内部类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mxfzNtOm-1612831449246)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121163005196.png)]

匿名内部类和匿名对象不是一回事

Date
package cn.itcast.Date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/*
* 计算一个人出生到现在过了多少天
*
* */
public class DatePractice {
    public static void main(String[] args) throws ParseException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的出生日期,格式为yyyy-MM-dd");
        String birthday = sc.next();
        SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd");
        Date birthdayDate = sfd.parse(birthday);
        long birthdayTime = birthdayDate.getTime();
        long todayTime = new Date().getTime();
        long time= todayTime-birthdayTime;
        System.out.println(time/1000/60/60/24);
        
    }
}
Calendar

日历类

Calendar类是一个抽象类 里面提供了很多操作日历字段的方法(YEAR MONTH DAY DAY_OF_MONTH HOUR)

Calendar类无法直接创建对象使用 里面有一个静态方法叫getInstance() 该方法返回了calendar类的子类对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BZc6iRP-1612831449246)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122092745065.png)]

package cn.itcast.calendar;

import java.util.Calendar;

/*
* 成员方法的参数:
* int field: 日历类的字段 可以使用Calendar类的静态成员变量获取
* int value: 传递的字段设置的具体的值
*
*
* */
public class Demo02CalendarMember {
    public static void main(String[] args) {
        demo01();
        demo02();
        demo03();
    }

    public static void demo03() {
        Calendar c = Calendar.getInstance();
//        把年增加2年
        c.add(Calendar.YEAR, 2);
//        把月减少3年
        c.add(Calendar.MONTH, -3);

        int year = c.get(Calendar.YEAR);
        System.out.println(year);

        int month = c.get(Calendar.MONTH);
        System.out.println(month+1);
    }

    private static void demo02() {
        Calendar c=Calendar.getInstance();
        c.set(Calendar.YEAR,9999);
        c.set(Calendar.MONTH,9);
        c.set(Calendar.DATE, 9);

        c.set(8888,8,8);

        int year = c.get(Calendar.YEAR);
        System.out.println(year);

        int month = c.get(Calendar.MONTH);
        System.out.println(month+1);

        int date = c.get(Calendar.DATE);
        System.out.println(date);

        int monthdate = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(monthdate);

    }

    private static void demo01() {
//        使用getIntance方法
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        System.out.println(year);

        int month = c.get(Calendar.MONTH);
        System.out.println(month+1);

        int date = c.get(Calendar.DATE);
        System.out.println(date);

        int monthdate = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(monthdate);
    }
}
System
package cn.itcast.system;
import java.util.Arrays;

public class Demo01System {
    public static void main(String[] args) {
        demo01();
        demo02();

    }

    public static void demo01() {
//        联系for循环打印1-9999的时间
        long s = System.currentTimeMillis();

        for (int i = 0; i < 9999; i++) {
            System.out.println(i);
        }
        long e = System.currentTimeMillis();

        System.out.println("程序共耗时:"+ (e-s)+"毫秒");


    }

    public static void demo02() {
//        数组复制的方法
        /*
        * arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
        * 将数组中指定的数据拷贝到另一个数组中
        * 参数:
        * src - 原数组
        * srcPos - 原数组中的起始位置
        * dest - 目标数组
        * destPos - 目标数据中的起始位置
        * length - 要复制的数组元素的数量
        *
        *
        * */
        int[] src = {1,2,3,4,5};
        int[] dest = {6,7,8,9,0};
        System.out.println("复制前:"+ Arrays.toString(dest));
        System.arraycopy(src,0,dest,0,3);
        System.out.println("复制后:"+ Arrays.toString(dest));
        
    }
}
StringBuilder

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xeC6kEhK-1612831449247)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122101042475.png)]

package cn.itcast.stringBuilder;

public class Demo01Stringbuilder {
    public static void main(String[] args) {
        StringBuilder bu1 = new StringBuilder();
        System.out.println("bu1:"+ bu1);

        StringBuilder bu2 = new StringBuilder("abc");
        System.out.println("bu2:"+bu2);
    }
}
package cn.itcast.stringBuilder;
/*
* Stringbuilder的成员方法:
* append():添加任意类型数据的字符串形式 并且返回当前对象自身
* 参数:
*  可以是任意的数据类型
*
* */
public class Demo02Stringbuilder {
    public static void main(String[] args) {
        StringBuilder bu1 = new StringBuilder();
//        append方法返回的是this 调用方法的对象bu1
        StringBuilder bu2 = bu1.append("abc");
        System.out.println(bu1);
        System.out.println(bu2);

        System.out.println(bu1==bu2); // true 两个对象是同一个对象


        /*
        链式编程:方法的返回值是一个对象 可以继续根据对象调用方法
        * */
        System.out.println("abc".toUpperCase().toLowerCase().toUpperCase());
        bu1.append("eee").append(8.8).append(true).append("67890vbnkl");
        System.out.println(bu1);


    }
}

toString()方法:

package cn.itcast.stringBuilder;

/*
 * StringBuilder和String可以相互转换
 * String-> StringBuilder: 可以使用StringBuilder的构造方法
 * StringBuilder-> String: 可以使用StringBuilder中的Tostring方法
 *
 * */
public class Demo03Tostring {
    public static void main(String[] args) {
        // String-> StringBuilder
        String str = "hello";
        System.out.println("str:" + str);

        StringBuilder bu = new StringBuilder(str);
        bu.append("world");
        System.out.println("bu:" + bu);

        // Stringbuilser-> String
        String s = bu.toString();
        System.out.println("s:" + s);

    }

}
包装类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xeY7OnSG-1612831449248)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122103446404.png)]

自动装箱和自动拆箱:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C1w9w7VG-1612831449249)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122103924965.png)]

1.基本数据类型对应的包装类

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charcharacter
booleanBoolean

2.基本数据类型与字符串之间的相互转换

基本类型转换为String

String转换为基本数据类型

除了Character类之外 其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:

package cn.itcast.packagegroup;
/*
* 基本类型与字符串之间的转换
* 基本类型-> string
* 1.基本类型数据的值+ ""(工作中常用的方法)
* 2.使用包装类中的静态方法
* static String toString(int t) 返回一个表示指定整数的String对象
* 3.使用String类中的静态方法
* static String valueOf(int i) 返回int参数的字符串表示形式
* 字符串-> 基本类型
* 使用包装类的静态方法parseXxx("字符串")
*
*
* */
public class Stringtobasic {
    public static void main(String[] args) {
//        基本类型--> 字符串
        String  s1 = 100+"";
        System.out.println(s1+200); // 100200

        String s2 = Integer.toString(100);
        System.out.println(s2+200); // 100200

        String s3 = String.valueOf(100);
        System.out.println(s3+200); // 100200

//        字符串 --> 基本类型
        int i = Integer.parseInt("100");
        System.out.println(i+200); // 300



    }
}
Collection

学习顶层

使用底层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tGCzT3da-1612831449249)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122110927206.png)]

单列集合的体系结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7amyJjO-1612831449250)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122111342644.png)]

Collection集合常用方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvZKuWLI-1612831449250)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122111647600.png)]

package cn.itcast.collection;

import java.util.Collection;
import java.util.ArrayList;

public class Test01 {
    public static void main(String[] args) {
//        创建集合对象
        Collection<String> coll = new ArrayList<>();
        coll.add("hello");
        coll.add("world");
        coll.add("java");
        coll.add("learner");
        System.out.println(coll);

//        删除集合中的某个元素
        boolean result = coll.remove("hello");
        System.out.println(result);
        System.out.println(coll);

//        清空集合中的所有元素
//        coll.clear();
//        System.out.println(coll);

//        判断集合中是否包含某个元素
        boolean res = coll.contains("java");
        System.out.println(res);

//        判断集合长度是否为空
        System.out.println(coll.isEmpty());

//        获取集合的长度
        System.out.println(coll.size());

//        将集合转换成一个数组
        Object[] arr = coll.toArray();
//        遍历数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }


    }
}
Iterator迭代器

244

package cn.itcast.iterator;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
* 迭代器的使用步骤:
* 1.使用集合中的方法iterator()获取迭代器的实现类对象 使用iterator接口接收(多态)
* 2.使用iterator接口中的方法hasNext()判断还有没有下一个元素
* 3.使用iterator接口中的方法next去取出集合中的下一个元素
* */
public class Demo01iterator {
    public static void main(String[] args) {
//        创建一个集合对象
        Collection<String> coll = new ArrayList<>();
//        往集合中添加元素
        coll.add("姚明");
        coll.add("kebi");
        coll.add("rabit");
        coll.add("cat");
        coll.add("tiger");

//        多态
        Iterator<String> it = coll.iterator();

//        判断集合中还有没有下一个元素
        boolean b = it.hasNext();
        System.out.println(b); // true
//        返回迭代的下一个元素
        String s = it.next();
        System.out.println(s);

        while(it.hasNext()){
            String e = it.next();
            System.out.println(e);
        }

        System.out.println("------------------------------------");

        for(Iterator<String> it2 = coll.iterator();it2.hasNext();){
            String e = it2.next();
            System.out.println(e);
        }

    }
}

迭代器的实现原理:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c8sktpMq-1612831449251)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122142919870.png)]

增强for循环:底层使用的也是迭代器

使用for循环的方式简化了迭代器的书写

所有的单列集合都可以使用增强for

增强for循环用来遍历集合和数组

格式:

for(集合/数组的数据类型 变量名:集合名/数组名) {

​ sout(变量名);

}

package cn.itcast.iterator;

import java.util.ArrayList;

public class Demo02for {
    public static void main(String[] args) {
        demo01();
        demo02();
    }

//    使用增强for循环遍历数组
    public static void demo01() {
        int[] arr = {1,2,3,4,5};
        for(int i: arr){
            System.out.println(i);
        }
    }
//    使用增强for循环遍历集合
    public static void demo02() {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

        for(String s: list){
            System.out.println(s);
        }
    }
}
泛型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jAn4SUlg-1612831449252)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122145443300.png)]

定义和使用含有泛型的类

定义和使用含有泛型的方法

泛型的通配符

斗地主综合案例

第一版斗地主:

package study.java.basic.collectionProject;

import java.util.ArrayList;
import java.util.Collections;

/*
* 斗地主综合案例:
* 1.准备牌
* 2.洗牌
* 3.发牌
* 4.看牌
*
* */
public class DouDiZhu {
    public static void main(String[] args) {
        ArrayList<String> poker = new ArrayList<>();
        String[] colors = {"♠","♥","♣","♦"};
        String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        poker.add("大王");
        poker.add("小王");
        for (String number : numbers) {
            for (String color : colors) {
//                System.out.print(color+number);
                poker.add(color+number);
            }
        }

        /*
        * 洗牌
        * */
        Collections.shuffle(poker);
        System.out.println(poker);

        /*
        * 发牌
        * */
        ArrayList<String> player01 = new ArrayList<>();
        ArrayList<String> player02 = new ArrayList<>();
        ArrayList<String> player03 = new ArrayList<>();
        ArrayList<String> diPai = new ArrayList<>();

        /*
        * 遍历poker集合 获取每一张牌
        * 使用poker集合的索引%3给三个玩家发牌
        * 剩余三张底牌
        * 注意:
        * 先判断(i>=51)否则牌发没了
        * 
        * */
        for (int i = 0; i < poker.size(); i++) {
            String p = poker.get(i);
            if (i>=51){
                diPai.add(p);
            }else if(i%3==0){
                player01.add(p);
            }else if (i%3==1){
                player02.add(p);
            }else if (i%3==2){
                player03.add(p);
            }
        }

        /*
        * 看牌
        * */
        System.out.println("牛德华的牌:"+player01);
        System.out.println("周润发的牌:"+player02);
        System.out.println("周星驰的牌:"+player03);
        System.out.println("底牌:"+diPai);

    }
}

第二版斗地主(有序版本):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fA5LBpLq-1612831449252)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210122165302941.png)]

package study.java.basic.collectionProject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

/*
* 斗地主综合案例:
* 1.准备牌
* 2.洗牌
* 3.发牌
* 4.排序
* 5.看牌
*
* */
public class DouDiZhu02 {
    public static void main(String[] args) {
//        1.准备牌
        HashMap<Integer, String> poker = new HashMap<>();
//        创建一个list集合 存储牌的索引
        ArrayList<Integer> pokerIndex = new ArrayList<>();
//        定义两个集合 存储花色和牌的序号
        List<String> colors = List.of("♠","♥","♣","♦");
        List<String> numbers = List.of("2","A","K","Q","J","10","9","8","7","6","5","4","3");
//        先把大王和小王存储到集合中
//        定义一个牌的索引
        int index= 0;
        poker.put(index,"大王");
        pokerIndex.add(index);
        index++;
        poker.put(index,"小王");
        pokerIndex.add(index);
        index++;

//        循环嵌套遍历两个集合 组装52张牌 存储到集合中
        for (String number : numbers) {
            for (String color : colors) {
                poker.put(index,color+number);
                pokerIndex.add(index);
                index++;
            }
        }
//        System.out.println(poker);
//        System.out.println(pokerIndex);

        /*
        * 2.洗牌
        * */
        Collections.shuffle(pokerIndex);
        System.out.println(pokerIndex);

        /*
        * 3.发牌
        * */
        ArrayList<Integer> player01 = new ArrayList<>();
        ArrayList<Integer> player02 = new ArrayList<>();
        ArrayList<Integer> player03 = new ArrayList<>();
        ArrayList<Integer> diPai = new ArrayList<>();

//        遍历存储牌索引的list集合 获取每一个牌的索引
        for (int i = 0; i < pokerIndex.size(); i++) {
            Integer in = pokerIndex.get(i);
            if(i>=51){
                diPai.add(in);
            }else if(i%3==0){
                player01.add(in);
            }else if(i%3==1){
                player02.add(in);
            }else if(i%3==2){
                player03.add(in);
            }
        }

        /*
        * 4.排序
        * */
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(diPai);

        /*
        * 5.看牌 调用看牌的方法
        *
        * */
        lookPoker("刘德华",poker,player01);
        lookPoker("jack",poker,player02);
        lookPoker("tom",poker,player03);
        lookPoker("底牌",poker,diPai);

    }
    /*
    * 定义一个看牌的方法 提高代码的复用性
    * 参数:
    * String name:玩家名称
    * HashMap<Integer,String> poker:存储牌的poker集合
    * ArrayList<Integer> list:存储玩家和底牌的list集合
    * 查表法:
    * 遍历玩家或者底牌集合 获取拍的索引
    * 使用牌的索引 去Map集合中 找到对应的牌
    * */
    public static void lookPoker(String name,HashMap<Integer,String> poker, ArrayList<Integer> list){
//        输出玩家名称 不换行
        System.out.print(name+":");
        for (Integer key : list) {
//            使用牌的索引去map集合中找到对应的牌
            String value = poker.get(key);
            System.out.print(value+":");

        }
        System.out.println("");
    }


}
XML

可扩展标记语言

标签是自定义的 语法严格

功能:存储数据 做配置文件:在网络中传输

语法:

后缀名为.xml

第一行必须写文档声明

xml文档中有且仅有一个根标签

属性值必须用引号引起来

标签必须正确关闭

xml标签区分大小写

1.快速入门

<?xml version='1.0' > 文档声明
<users>
	<user id='1'> 
        <name>zhangshan</name>

        <age>1</age>

        <gender>male</gender>
	</user>
	<user id='2'> 
        <name>lisi</name>

        <age>2</age>

        <gender>female</gender>
	</user>

</users>

2.组成部分

文档声明

格式:<?xml 属性列表 ?>

属性列表:

version:版本号,必须的属性(主流的是1.0)

encoding:编码方式,告知解析引擎当前文档使用的字符集 默认值:IOS-8859-1

standalone:是否独立 取值(yes:不依赖其他文件/no:依赖其他文件)

指令(了解)

标签:自定义的标签

数字和标点符号不能开头

属性:id属性值唯一

文本:

CDATA区:在区域中的数据会被原样展示

格式:<![CDATA[]]>

项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VSlQk8X7-1612831449253)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121140515317.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xz3CZkjs-1612831449254)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121140817116.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObVErUq7-1612831449255)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121141021357.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pg3Proze-1612831449256)(C:\Users\sjy\AppData\Roaming\Typora\typora-user-images\image-20210121141158848.png)]

){
player02.add(in);
}else if(i%3==2){
player03.add(in);
}
}

    /*
    * 4.排序
    * */
    Collections.sort(player01);
    Collections.sort(player02);
    Collections.sort(player03);
    Collections.sort(diPai);

    /*
    * 5.看牌 调用看牌的方法
    *
    * */
    lookPoker("刘德华",poker,player01);
    lookPoker("jack",poker,player02);
    lookPoker("tom",poker,player03);
    lookPoker("底牌",poker,diPai);

}
/*
* 定义一个看牌的方法 提高代码的复用性
* 参数:
* String name:玩家名称
* HashMap<Integer,String> poker:存储牌的poker集合
* ArrayList<Integer> list:存储玩家和底牌的list集合
* 查表法:
* 遍历玩家或者底牌集合 获取拍的索引
* 使用牌的索引 去Map集合中 找到对应的牌
* */
public static void lookPoker(String name,HashMap<Integer,String> poker, ArrayList<Integer> list){

// 输出玩家名称 不换行
System.out.print(name+"😊;
for (Integer key : list) {
// 使用牌的索引去map集合中找到对应的牌
String value = poker.get(key);
System.out.print(value+"😊;

    }
    System.out.println("");
}

}


































#### XML

可扩展标记语言

标签是自定义的 语法严格

功能:存储数据 做配置文件:在网络中传输

语法:

后缀名为.xml

第一行必须写文档声明

xml文档中有且仅有一个根标签

属性值必须用引号引起来

标签必须正确关闭

xml标签区分大小写



1.快速入门

```xml
<?xml version='1.0' ?> 文档声明
<users>
	<user id='1'> 
        <name>zhangshan</name>

        <age>1</age>

        <gender>male</gender>
	</user>
	<user id='2'> 
        <name>lisi</name>

        <age>2</age>

        <gender>female</gender>
	</user>

</users>

2.组成部分

文档声明

格式:<?xml 属性列表 ?>

属性列表:

version:版本号,必须的属性(主流的是1.0)

encoding:编码方式,告知解析引擎当前文档使用的字符集 默认值:IOS-8859-1

standalone:是否独立 取值(yes:不依赖其他文件/no:依赖其他文件)

指令(了解)

标签:自定义的标签

数字和标点符号不能开头

属性:id属性值唯一

文本:

CDATA区:在区域中的数据会被原样展示

格式:<![CDATA[]]>

项目

[外链图片转存中…(img-VSlQk8X7-1612831449253)]

[外链图片转存中…(img-xz3CZkjs-1612831449254)]

[外链图片转存中…(img-ObVErUq7-1612831449255)]

[外链图片转存中…(img-pg3Proze-1612831449256)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值