4.斗地主发牌 4.1案例介绍 按照斗地主的规则,完成洗牌发牌的动作。具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。 4.2案例分析 准备牌:牌可以设计为一个ArrayList<String>,每个字符串为一张牌。每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。牌由Collections类的shuffle方法进行随机排序。 发牌将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 看牌直接打印每个集合。 ...
1.不可变集合 1.1什么是不可变集合 是一个长度不可变,内容也无法修改的集合 1.2使用场景 如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。 当集合对象被不可信的库调用时,不可变形式是安全的。 简单理解: 不想让别人修改集合中的内容 比如说: 1,斗地主的54张牌,是不能添加,不能删除,不能修改的 2,斗地主的打牌规则:单张,对子,三张,顺子等,也是不能修改的 3,用代码获取的操作系统硬件信息,也是不能被修改的 1.3不可变集合分类 不可变的list集合 不可变的set集合 不可变的map集合 1.4不可变的list集合 publicclassImmutabl...
2.Stream流 2.1体验Stream流【理解】 案例需求按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得到的集合 原始方式示例代码 publicclassMyStream1{ publicstaticvoidmain(String[]args){ //集合的批量添加 ArrayList<String>list1=newArrayList<>(List.of("张三丰","张无忌","张翠山","王二...
1.Map集合 1.1Map集合概述和特点【理解】 Map集合概述 interfaceMap<K,V>K:键的类型;V:值的类型 Map集合的特点 双列集合,一个键对应一个值 键不可以重复,值可以重复 Map集合的基本使用 publicclassMapDemo01{ publicstaticvoidmain(String[]args){ //创建集合对象 Map<String,String>map=newHashMap<String,String>(); //Vput(Kkey,Vvalue)将指定的值与该映射中的指定键...
2.List集合 2.1List集合的概述和特点【记忆】 List集合的概述 有序集合,这里的有序指的是存取顺序 用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素 与Set集合不同,列表通常允许重复的元素 List集合的特点 存取有序 可以重复 有索引 2.2List集合的特有方法【应用】 方法介绍 方法名 描述 voidadd(intindex,Eelement) 在此集合中的指定位置插入指定的元素 Eremove(intindex) 删除指定索引处的元素,返回被删除的元素 Eset(int...
JDK8时间相关类 JDK8时间类类名 作用 ZoneId 时区 Instant 时间戳 ZoneDateTime 带时区的时间 DateTimeFormatter 用于时间的格式化和解析 LocalDate 年、月、日 LocalTime 时、分、秒 LocalDateTime 年、月、日、时、分、秒 Duration 时间间隔(秒,纳,秒) Period 时间间隔(年,月,日) ChronoUnit 时间间隔(所有单位) 4.1ZoneId时区 / staticSet<string>getAvailab...
Calendar类 3.1概述 java.util.Calendar类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。 有两种方式可以获取GregorianCalendar对象: 直接创建GregorianCalendar对象; 通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象【本次课使用】 3.2常用方法 方法名 说明 publicstaticCalendargetInstance() 获取一个它的子...
1.8本地数据爬取 Pattern:表示正则表达式Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。 代码示例: packagecom.itheima.a08regexdemo; importjava.util.regex.Matcher; importjava.util.regex.Pattern; publicclassRegexDemo6{ publicstaticvoidmain(String[]args){ /有如下文本,请按照要求爬取数据。 Java自从95年问世以来,经历了很多版本,目前企业中用的最...
7BigDecimal类 7.1引入 首先我们来分析一下如下程序的执行结果: publicclassBigDecimalDemo01{ publicstaticvoidmain(String[]args){ System.out.println(0.09+0.01); } } 这段代码比较简单,就是计算0.09和0.01之和,并且将其结果在控制台进行输出。那么按照我们的想法在控制台输出的结果应该为0.1。那么实际的运行结果是什么呢?我们来运行一下程序,控制台的输出 结果如下所示: 0.09999999999999999 这样的结果其实就是一个丢失精度的结果。为什么...
5Objects类 5.1概述 tips:了解内容 查看API文档,我们可以看到API文档中关于Objects类的定义如下: 编辑 Objects类所在包是在java.util包下,因此在使用的时候需要进行导包。并且Objects类是被final修饰的,因此该类不能被继承。 Objects类提供了一些对象常见操作的方法。比如判断对象是否相等,判断对象是否为null等等。 接下来我们来查看一下API文档,看一下Objects类中的成员,如下所示: publicclassObjectsDemo02{ publicstaticvoidmain(String[]args){...
4Object类 4.1概述 tips:重点讲解内容 查看API文档,我们可以看到API文档中关于Object类的定义如下: 编辑 Object类所在包是java.lang包。Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类;换句话说,该类所具备的方法,其他所有类都继承了。 查看API文档我们可以看到,在Object类中提供了一个无参构造方法,如下所示: 编辑 但是一般情况下我们很少去主动的创建Object类的对象,调用其对应的方法。更多的是创建Object类的某个子类对象,然后通过子类对象调用Object类中的方法。 4...
4Object类 4.1概述 tips:重点讲解内容 查看API文档,我们可以看到API文档中关于Object类的定义如下: 编辑 Object类所在包是java.lang包。Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类;换句话说,该类所具备的方法,其他所有类都继承了。 查看API文档我们可以看到,在Object类中提供了一个无参构造方法,如下所示: 编辑 但是一般情况下我们很少去主动的创建Object类的对象,调用其对应的方法。更多的是创建Object类的某个子类对象,然后通过子类对象调用Object类中的方法。 4...
3.1概述 Runtime表示Java中运行时对象,可以获取到程序运行时设计到的一些信息 3.2常见方法 常见方法介绍 我们要学习的Object类中的常见方法如下所示: publicstaticRuntimegetRuntime() //当前系统的运行环境对象 publicvoidexit(intstatus) //停止虚拟机 publicintavailableProcessors() //获得CPU的线程数 publiclongmaxMemory() //JVM能从系统中获取总内存大小(单位byte) publiclongtotalMemory() //...
3.1概述 Runtime表示Java中运行时对象,可以获取到程序运行时设计到的一些信息 3.2常见方法 常见方法介绍 我们要学习的Object类中的常见方法如下所示: publicstaticRuntimegetRuntime() //当前系统的运行环境对象 publicvoidexit(intstatus) //停止虚拟机 publicintavailableProcessors() //获得CPU的线程数 publiclongmaxMemory() //JVM能从系统中获取总内存大小(单位byte) publiclongtotalMemory() //...
2System类 2.1概述 tips:了解内容 查看API文档,我们可以看到API文档中关于System类的定义如下: 编辑 System类所在包为java.lang包,因此在使用的时候不需要进行导包。并且System类被final修饰了,因此该类是不能被继承的。 System包含了系统操作的一些常用的方法。比如获取当前时间所对应的毫秒值,再比如终止当前JVM等等。 要想使用System类我们就需要先创建该类的对象,那么创建对象就需要借助于构造方法。因此我们就需要首先查看一下API文档,看看API文档中针对System类有没有提供对应的构造方法。通过API文档来 查看一下...
3.1概述 3.1.1什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。可以把内部类理解成寄生,外部类理解成宿主。 3.1.2什么时候使用内部类 一个事物内部还有一个独立的事物,内部的事物脱离外部的事物无法独立使用 人里面有一颗心脏。 汽车内部有一个发动机。 为了实现更好的封装性。 3.2内部类的分类 按定义的位置来分 成员内部类,类定义在了成员位置(类中方法外称为成员位置,无static修饰的内部类) 静态内部类,类定义在了成员位置(类中方法外称为成员位置,有static修饰的内部类) 局部内部类,类定义在方法内 匿名内部类,没有名...
2.1概述 我们已经学完了抽象类,抽象类中可以用抽象方法,也可以有普通方法,构造方法,成员变量等。那么什么是接口呢?接口是更加彻底的抽象,JDK7之前,包括JDK7,接口中全部是抽象方法。接口同样是不能创建对象的。 2.2定义格式 //接口的定义格式: interface接口名称{ //抽象方法 } //接口的声明:interface //接口名称:首字母大写,满足“驼峰模式” 2.3接口成分的特点 在JDK7,包括JDK7之前,接口中的只有包含:抽象方法和常量 2.3.1.抽象方法 注意:接口中的抽象方法默认会自动加上publicabstract修饰程序员无需自己手写!!按照规范:...
1.1概述 1.1.1抽象类引入 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说,父类可能知道子类应该有哪个功能,但是功能具体怎么实现父类是不清楚的(由子类自己决定),父类只需要提供一个没有方法体的定义即可,具体实现交给子类自己去实现。我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。 抽象方法:没有方法体的方法。 抽象类:包含抽象方法的类。 1.2abstract使用格式 abstract是抽象的意思,用于修饰方法方法和类...
包 2.1包 包在操作系统中其实就是一个文件夹。包是用来分门别类的管理技术,不同的技术类放在不同的包下,方便管理和维护。 在IDEA项目中,建包的操作如下: 编辑 包名的命名规范: 路径名.路径名.xxx.xxx //例如:com.itheima.oa 包名一般是公司域名的倒写。例如:黑马是www.itheima.com,包名就可以定义成com.itheima.技术名称。 包名必须用”.“连接。 包名的每个路径名必须是一个合法的标识符,而且不能是Java的关键字。 2.2导包 什么时候需要导包? 情况一:在使用Java中提供的非核心包中的类时 情况二:使用自己写的其他包中的类时 ...
1.1多态的形式 多态是继封装、继承之后,面向对象的第三大特性。 多态是出现在继承或者实现关系中的。 多态体现的格式: 父类类型变量名=new子类/实现类构造器; 变量名.方法名(); 多态的前提:有继承关系,子类对象是可以赋值给父类类型的变量。例如Animal是一个动物类型,而Cat是一个猫类型。Cat继承了Animal,Cat对象也是Animal类型,自然可以赋值给父类类型的变量。 1.2多态的使用场景 如果没有多态,在下图中register方法只能传递学生对象,其他的Teacher和administrator对象是无法传递给register方法方法的,在这种情况下,只能...