![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java学习第一阶段
文章平均质量分 65
戟御
一个正在努力的编程人
展开
-
Java基础复习
Java基础总结Java基础知识总结1. 集合1.1集合与数据的区别1.2 集合的大致体系结构1.3 集合中个具体实现类的特色ArrayListLinkedListVectorHashSetTreeSetHashMapTreeMap2. IO流2.1、流的概念2.2、流的分类2.3、IO流的使用3. 多线程3.1 进程与线程3.2 并行和并发3.3 线程的三种创建方式3.4 线程的常用方法3.5 死锁代码实例4. 网络编程4.1 计算机网络分层4.2 TCP协议与UDP协议5. 反射和注解5.1 反射5.1原创 2021-12-11 15:21:02 · 614 阅读 · 0 评论 -
java反射机制小复习
反射相关的主要APIjava.lang.Class:代表一个类java.lang.reflect.Method:代表类的方法java.lang.reflect.Field:代表类的成员变量java.lang.reflect.Constructor:代表类的构造器反射的相关操作获取Class实例的方式//方式一:调用运行时类的属性:.class(可以通过泛型进行约束)Class clazz1 = Person.class;System.out.println(clazz1);//方式二:原创 2021-09-12 19:48:28 · 107 阅读 · 0 评论 -
工厂设计模式(java版本,代码简易版本,功能完善,举例有代表性)-第一阶段-第二十四天
抽象工厂模式的主要角色。抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。原创 2021-09-06 23:46:20 · 86 阅读 · 0 评论 -
jdk8新特性(LocalDate、LocalTime、LocalDateTime的基本使用)-第一阶段-第二十四天
localDate、LocalTime、LocalDateTime概述:LocalDate、LocalTime、LocalDateTime类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储生日、纪念日等日期。LocalTime表示一个时间,而不是日期。LocalDateTime是用原创 2021-09-06 21:16:55 · 178 阅读 · 0 评论 -
jdk8新特性(Stream流)-第一阶段-第二十三天
Stream流1. Stream流概述概念:java8的另一个非常优秀的新特性,可以用来非常方便的对指定的集合进行各种比如 过滤 映射 排序等等复杂的操作StreamAPI提供了对容器中数据进行高效且方便的处理方式和IO流不同,Stream流关注的是对集合中数据的一些列操作,类似于生产线,流本身并不存储数据,也不会对数据源进行改变,操作后他们会返回一个持有处理结果的一个新的stream集合关注的是数据的存储,流关注的是数据的运算处理Stream关注的是对数据的运算,与CPU打交道集合关注原创 2021-09-06 15:05:41 · 182 阅读 · 0 评论 -
jdk8新特性(Lambda表达式))-第一阶段-第二十三天
Lambda表达式1.概念JAVA8提供的一个非常优秀的新特性,从本质上来说Lambda表达式是一个遵循某一个接口规范(方法的形参、方法的返回类型)的匿名方法,提供了在JAVA中进行接口实现的一种简便形式,精简了代码的编写Lambda表达式一定是基于某个具体的接口规范来编写的,这个接口必须是一个函数式接口。函数式接口:接口中只能有且只有一个必须被子类实现的抽象方法,默认方法不需要强制子类实现函数式专用注解@FunctionalInterface2.4大函数式接口4大函数式接口都是定义在j原创 2021-09-04 16:54:45 · 82 阅读 · 0 评论 -
反射和注解-第一阶段-第二十二天
反射用来在程序的运行期间可以反射提供的一些API来获取某个类的内部结构信息,并基于或得到的信息完成对象的创建和访问操作用来进行框架底层设计的,开发中很少直接使用框架(通用性)=反射+注解+设计模式反射相关的类都是定义在java.lang.reflect包中反射从一定程度上来说破坏了类的封装性反射获取对象调用Class类的静态方法forName(String ClassName) 来获取某个类的字节码对象(用的最多)通过类名.class的方式也可以获取到一个类的字节码对象对原创 2021-09-04 15:00:01 · 67 阅读 · 0 评论 -
网络编程-第一阶段-第二十一天
网络编程1.网络的基本概念1.1 计算机网络使用通信线路将分布在不同地理位置的多台计算机连接起来形成一个网络系统,主要的目的是为了实现网络中任意两台计算机之间的信息传输和资源的共享网络编程需要解决的两个问题:如何在整个网络中精准的找到通信的对方?如何实现通信双方有效的沟通?问题一的解决办法:使用IP地址可以在整个网络中唯一确定某一台主机,IP地址具有“唯一性”关于IP地址的一些常识2.1 IP地址的分类按照版本可分为IPV4和IPV62.1.1 IPV4的格式:采用4个字节原创 2021-08-14 17:09:49 · 85 阅读 · 2 评论 -
File类的使用-第一阶段-第二十天
File类的介绍IO流技术关注的是文件内容的读写,File关注的不是内容操作而是文件的整体操作,比如文件的创建 文件的删除…File类是用来对一个磁盘文件或者文件夹进行封装得到的一个对象File对象的常用方法介绍:createNewFile() 创建一个新文件或文件夹,操作完成后返回一个boolean类型的结果表示本次执行是否创建成功注意:如果创建的文件已经存在则放弃创建新文件的过程并返回一个false路径字符串中如果没有文件名的后缀将被处理为一个目录(文件夹)mkdir()创建原创 2021-08-12 21:35:45 · 76 阅读 · 0 评论 -
IO流技术-第一阶段-第十九天
IO流一、流的概念流是指内存与存储设备之间传输数据的通道。其中I 表示input 输入 O 表示output 输出,这里的入和出是以内存(JAVA程序为参照),要实现JAVA程序和外部磁盘文件之间的数据交互,首先需要在这两者之间建立一个数据的通信管道,然后让我们的数据在管道中进行流通,因此我们将这样的技术形象的称为“流技术”,如果是从JAVA程序到外部磁盘称为输出或者写操作,如果是从外部磁盘向JAVA程序中流动则称为输入或者读操作二、流的分类按方向:以内存为参照物输入流,指从存储原创 2021-08-11 23:16:34 · 184 阅读 · 0 评论 -
线程4-多线程和并发编程2-第一阶段-第十八天
ReentrantLock重入锁(公平锁)的使用可重入锁(明锁),相比于synchronized来说,可重入锁具有以下特点:1.可中断性:可以让没有获得到锁的线程放弃对锁的获取,解除线程阻塞状态2.可以设置多个条件变量3.可以设置公平锁该类是由JUC包中提供的使用方法:创建一个重入锁对象ReentrantLock lock = new ReentrantLock();Condition cond = lock.newCondition();产生锁:lock.lock();释放锁:原创 2021-08-11 22:20:52 · 92 阅读 · 0 评论 -
线程3-多线程和并发编程-第一阶段-第十七天
多线程和并发编程在String和包装类中都存在着不可变性,由于不可变性就算多个线程同时操作一个变量也不会出现线程安全问题1. 变量的可见性每个线程都有自己的工作区(内存),在线程任务执行的时候会从主存中将共享变量的值拷贝一份到自己的工作区中,这样做的好处是可以提高线程的执行效率,同时也带来了一个问题:一个线程对共享数据的修改默认情况下对其他线程来说是不可见的解决方式有两种:使用同步锁可以保证共享变量在多个线程之间的可见性(重量级的)在变量定义的前面加上一个修饰符volatile,但是原创 2021-08-11 00:04:24 · 76 阅读 · 0 评论 -
线程3-synchronized原理简易说明-第一阶段-第十六天
synchronized的原理说明说明synchronized(object)中的对象不是真正的锁对象每个JAVA对象都可以关联一个真正的锁对象(锁对象是由操作系统向JAVA程序提供的,这个对象也称为监视器)简易原理图操作系统提供给JAVA程序的锁对象中包含了三个重要成员:owner(拥有者) entryList:阻塞队列 waitSet(暂时不考虑)...原创 2021-08-10 22:23:27 · 49 阅读 · 0 评论 -
线程2-线程的安全问题-第一阶段-第十六天
线程的安全问题线程安全问题触发的几个条件:要有多线程并发或并行操作要有共享数据,即两个或多个线程处理一个数据要有对共享数据的读写操作问题1:设计一个售票系统,售票系统要求有一个固定的票数,且多个售票窗口同时进行代码展示与结果展示package com.qianfeng.day16;public class TickWindow implements Runnable{ public static int ticks = 10;//总票数 public void Book原创 2021-08-04 23:05:16 · 115 阅读 · 0 评论 -
多线程1-第一阶段-第十六天
进程与线程进程: 进程是程序的一次动态执行的过程,它经历了从代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。程序是一个静态的概念,进程是一个动态的概念。线程:线程依附于指定的进程,并且可以快速启动以及并发执行。一个进程中可以包含多个进程,至少包含一个,每个线程就是这个进程的一条执行路径,每个JAVA程序默认包含有一个主线程(运行main方法的)。进程可以是线程的容器,进程不完成具体的指定执行,Java指令都是通过线程去执行的,线程是CPU进行调度的最小单位原创 2021-08-04 21:44:53 · 71 阅读 · 0 评论 -
异常-第一阶段-第十五天
异常的概念异常是指在程序执行时由于程序处理逻辑上的错误而导致程序中断的一种指令流。从本质上来说异常就是一个对象,对象一定是在程序执行的过程中new出来的,异常一定是发生在运行期,和编译期间的语法错误区分开不产生异常的代码package com.qianfeng.day15;public class Test03 { public static void main(String[] args) { System.out.println("main方法开始执行!!!"); int i原创 2021-08-02 21:47:57 · 78 阅读 · 0 评论 -
HashMap添加元素原码分析
HashMap添加元素大致步骤HashMap添加元素过程如下:HashMap在jdk1.8版本之后数据结构 = 数组 + 链表 + 红黑树,内部是通过Node类来实现基本结构的。HashMap在添加元素的时候是通过调用HashMap中的put()方法,在调用此方法的时候内部紧接着调用了putVal()方法,在此方法中:2.1 首先会调用hash()方法然后在内部接着调用传入的键值的元素的hashCode()方法,接着经过位运算计算得出hash值。2.2 在putVal()方法中首先通过ta原创 2021-07-31 17:31:49 · 310 阅读 · 0 评论 -
集合框架4-Map接口以及常用实现类HashMap、TreeMap、LinkedHashMap、Hashtable、Properties的使用-第一阶段-第十四天
Map接口1. 概述Map接口是一个双列集合(每个元素都包含两个值 分别为key 和value),其中这个key要求必须是唯一的,value可以重复,将来可以根据某个key来从容器中快速获取对应的哪个唯一元素key和value本身就是一个对,之间存在映射关系,在某些语言中将这种集合形象的称为“字典集合”2. HashMap实现类常用的一些方法put(key,value) 向Map集合中添加新元素size() 返回当前集合中的元素个数get(key)根据某个key获取对应的val原创 2021-07-31 16:24:34 · 121 阅读 · 0 评论 -
Comparable接口和Comparator接口它们的区别与使用方式
Comparable接口此接口只包含一个compareTo(T t)方法。这个方法可以个给两个对象排序。返回值类型为int,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象。此方法一般写在传入的集合元素中,让元素继承此接口,重写上述方法。例子如下:package com.qianfeng.weekendDay03;public class Student implements Comparable<Object>{ private String numb原创 2021-07-31 15:34:10 · 158 阅读 · 0 评论 -
集合框架3-Set接口与它的实现类HashSet、TreeSet-第一阶段-第十四天
Set接口Set常用方法Set接口继承与Collection接口,在父类接口的基础上没有任何的方法拓展,几乎都是之前父类接口的方法,任何集合中只能存储引用类型的数据add(E e) 向集合中添加一个新的元素,当没有具体的类型的时候默认为Object类型说明:size()返回集合中的元素个数;remove(Object o)从集合中删除指定元素,但是只能删除一个,要删除多个,就需要进行迭代(放在循环里删除),正确的调用方法addAll(Collection collection);将一个原创 2021-07-31 15:00:36 · 70 阅读 · 0 评论 -
集合框架2-List接口下的三个常用实现类(ArrayList、LinkenList、Vector)讲解-第一阶段-第十三天
List接口的使用首先List接口是从Collection接口那里继承而来,特点是有序有重复有序:每个元素都有一个固定的下标,和数组类似有重复:可以有多个重复的元素List接口中与下标相关的对应方法add(int index, Object object),添加元素到指定序列get(int index)根据下标直接获取某个位置的元素值并返回set(int index,Object e)修改指定下标位置的元素值remove(int index) 根据下标删除指定位置的元素注意:如原创 2021-07-31 14:14:00 · 202 阅读 · 0 评论 -
方法可变参数、增强for循环-第一阶段-第十三天
方法可变参数为了方便开发者可以更加灵活的定义方法,避免方法中参数的执行限制,所以java则jdk1.5之后提供了方法可变参数支持,利用这一特点可以在方法调用时采用动态形式传递若干个参数数据。语法定义public [static] [final] 返回值类型 方法名称(参数列表... 变量){ [return [返回值];]}实际实现形式在可变参数中,虽然定义的形式不是数组,但是确实按照数组的方式进行操作,在参数列表当中,可以采取混搭的方式(在定义方法可变参数的同时能够能够添加其他的参数原创 2021-07-31 09:28:24 · 72 阅读 · 0 评论 -
Collections集合工具类的使用简介-第一阶段-第十三天
Collections集合工具类Collection和Collections有什么区别一个是接口一个是类,两个完全不一样Collection接口是单列集合的顶级接口而Collections集合工具类只是提供的一些快捷方法Collections工具类的特点在Collections工具类中都是通过静态修饰(static)可以通过==类名.==的方式来调用Coolections类中的成员Collections工具类的常用方法package com.qianfeng.day13;impo原创 2021-07-29 15:26:53 · 61 阅读 · 0 评论 -
泛型(Generics)-第一阶段-第十三天
泛型理解:广泛的类型(参数化的类型)在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型但是不能写入基本数据类型为什么会运用泛型:如果在储存数据的时候想要只存储String类型的数据,如果不加泛型,那么当你加入其它类型的数据的时候不会报错,会导致储存类型混乱,如果以后处理此数据,难免不会报错。如果使用集合的时候没有使用泛型,系统会默认指定为Object类型不使用泛型的情况package com.qianfeng.day13;import java.util.Arr原创 2021-07-29 15:07:50 · 71 阅读 · 0 评论 -
集合框架1(体系结构、collection接口、List接口)-第一阶段-第十二天
集合框架一. 什么是集合?集合是一个批量的数据储存的容器(内存),作用和数组非常类似但是数组有着以下缺陷数组的长度一旦确定就不可改变数组对数据提供出的方法不够丰富(大多都继承的是Object的方法)二. Java中的体系结构集合分为两大类:单列集合和双列集合单列集合:该集合体系中的每个元素都是一个值双列集合:该集合体系中每个元素都有两个值组成分别是key键和value值两者之间存在着映射关系单列集合的顶级接口是Collection双列集合的顶级接口是MapCollectio原创 2021-07-28 18:46:38 · 114 阅读 · 0 评论 -
常用类3(System类、BigDecimal类、Date类)
1.System类System类中的常用方法介绍:1.currentTimeMillis()获取系统当前的时间的毫秒数(从1970-01-01开始),返回一个long类型long l = System.currentTimeMillis();ystem.out.println(l);2.System.gc();通知或建议垃圾回收器进行内存的回收3.System.exit(0);退出JAVA虚拟机,结束程序的执行4.复制数组int[] arr1=new int[] {1,2,3};int原创 2021-07-28 13:52:10 · 74 阅读 · 0 评论 -
常用类2(包装类)-第一阶段-第十二天-2021-07-28
包装类型出现的理由:java是一个纯面向对象的语言,但是在java中存在基本数据类型(四类八种),它其实是没有直接或者间接的继承Object类的,因此没有类的一些功能,所以如果出现以下方法:public Static void Test(Object obj){ System.out.println("传入了" + obj.toString())}那么将不能传入基本数据类型包装类型分为八种:Byte、Short、Integer、Long、Float、Double、Character、B原创 2021-07-28 13:04:26 · 86 阅读 · 0 评论 -
常用类1(内部类、Object类、String类)-第一阶段-第十一天-2021-7-27
1. 内部类在一个类的内部又定义了另外一个完整的类,类的定义上的嵌套内部类分为:成员内部类 静态内部类 局部内部类 匿名内部类(局部内部类)1.1 成员内部类成员内部类和属性方法同一级别内部内的方法中可以直接访问外部类的成员如果成员内部类中存在和外部类同名的属性优先访问自己的,如果非要访问外部类对象中的属性,使用语法:外部类名称.this.成员变量在成员内部类中不能定义静态的成员,因为内部类对象必须依赖外部类对象的存在而存在,但是static类型的成员无法保证外部类对原创 2021-07-27 23:34:40 · 122 阅读 · 0 评论 -
面向对象(static、final、接口)-第一阶段-第十天-2021-7-26
static关键字(静态的)static关键字能够修饰类中的属性、方法、代码块static关键字用来修饰属性(成员变量)被修饰后的成员变量是根据类的加载在而加载,被修饰的成员变量一般用类名.属性名的方式来调用,虽说能够用对象.属性的形式调用但是不规范,因为静态成员变量可以解释为所有对象公共拥有的一个属性,用来表示某一个对象是不规范的。被static修饰的属性在内存中只有一份,其他的对象来调用此属性的时候又是引用其地址值,而不是再创建一份。静态的属性的应用比如:想要知道一个类创建了多少个对原创 2021-07-26 23:43:17 · 77 阅读 · 0 评论 -
面向对象(多态)-第一阶段-第九天-2021-07-23
多态2一.类和类之间的依赖关系依赖是类和类之间的一种非常常见的关系比如:程序员 依赖 电脑 人 依赖 交通工具但是有些依赖关系容易混淆,比如是遥控器依赖电器不是电器依赖遥控器因为遥控器离开了电器,那么它的存在就没有意义但是电器一旦打开,即使不依赖遥控器它也能正常工作,比较电器的共工作是通过其本身的线路和工作器件完成,而不是遥控器。存在强依赖关系和弱依赖关系,通过实例来说明比如:出租车司机对车就是一个强依赖的关系(出租车司机的很多行为都是离不开车的存在,所以是强依赖关系)强依原创 2021-07-24 16:29:38 · 66 阅读 · 0 评论 -
面向对象2(三大特性)-第一阶段-第八天-2021-7-22
面向对象的三大特性封装、继承、多态1. 封装封装的作用就是将内部数据私有化,使外部不能随意访问封装的实施:将类中的属性私有化(private)然后提供get和set方法set方法,就是将数据传入对象对应的属性get方法,就是获取对象所对应属性的数据2. 继承概念:继承就是形容一个类和另一个类之间的关系,如A类是一种B类那么:A类就叫做子类、派生类B类就叫做父类、超类、基类extends关键字来建立继承关系,在继承中父类就是对很多个子类相同特性的一个类例原创 2021-07-22 20:25:34 · 84 阅读 · 0 评论 -
面向对象1-第一阶段-第七天-2021-07-21
方法1. 方法的基本定义方法方法修饰符 返回值类型 方法名(形参列表){ 方法体;return 返回值;}比如public int abc(int x){ return x+1;}2. 方法的基本分类无返回值的方法与有返回值的方法静态方法与非静态方法有形参列表与无形参列表3. 方法的调用对象名.方法名(形参列表);4. 方法的细节说明方法的返回值类型可以是基本数据类型也能是引用数据类型方法名的...原创 2021-07-21 22:50:57 · 49 阅读 · 0 评论 -
数组2-第一阶段-第六天-2021-7-20
排序的几种排序方法选择排序找到每一轮的最小值和这一轮最前面的数进行交换,一共进行length-1轮冒泡排序每相邻两个数进行大小比较,如果前面的数大于后面的数则交换这两个数,一共进行length-1轮插入排序第一个数不用动,从第二个数开始依次往队伍中插入,保证从大到小的顺序不变,直到最后一个元素也插入完成,整个数组的顺序就排好了数组的内存分析在JVM的内存分为两个部分:栈内存:小 而 快 可以被程序员直接访问堆内存:大 而 慢 不能被程序员直接访问数据类型其实可以分为原创 2021-07-21 21:33:25 · 66 阅读 · 0 评论 -
数组1-第一阶段-第五天-2021-7-19
数组的定义数组的基本概念数组:内存中连续的一片存储单元,和变量本质上来没有任何区别,用来帮助我们进行批量的数据的存储(数据结构),我们可以认为一个数组其实就是由多个连续的变量共同组成,构成数组的每个变量概念上称为数组的“元素”数组常用的定义方法 int len = 5; //表示长度 int[] arr; arr = new int[len]; int[] arr1 = new int[len]; int[] arr2 = new int[]{1,2,3,4,5}; int[] ar原创 2021-07-19 21:32:13 · 49 阅读 · 0 评论 -
java数据类型-第一阶段-第一天-2021-07-13
一、程序程序就是一段指令文件,计算机中所有的活动都是通过程序来实现的二、算法算法就是相对于计算机来说的一种想法,最典型的一个例子就是高斯上学的从1到100加起来的方式,那就是一个简单的算法。程序 = 算法 + 数据结构三、计算机的各种语言1.机器语言:有“0”和“1”组成,这是能由计算机直接识别的语言(最低级语言)2.汇编语言:由一系列的指令组成,也算作是一个(低级语言)3.高级语言:java...原创 2021-07-13 20:55:45 · 73 阅读 · 0 评论 -
数据计算-第一阶段-第二天-2021-07-14
键盘输入的操作步骤package com.qf.day02;import java.util.Scanner;public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(); double b = input.nextDouble(); float c = input.nextFloat();原创 2021-07-14 22:39:18 · 82 阅读 · 0 评论 -
选择结构-第一阶段-第三天-2021-07-15
一:包的概念package:表示声明一个包import:表示导入一个包包的取名原则为域名倒置原则二:程序的流程控制语句包含顺序结构 选择结构 循环结构三:顺序结构程序第一条语句执行到最后一条语句就是顺序结构四:选择(分支)结构下列分别是单分支结构、双分支结构、多分支结构 if(true) { System.out.println("结果"); } if(true) { System.out.println("结果1"); } else { Sys原创 2021-07-15 20:46:16 · 54 阅读 · 0 评论 -
循环结构-第一阶段-第四天2021-07-16
一. switch语句详解基本样式为 switch (key) { case value1: break; case value2: break; default: break; }switch中的key的变量类型可以是byte、short、int、char、String但是不能为long、float、double、boolean其中value为常量表达式在基本语法中break和default可以不写,但是不写的原创 2021-07-16 22:40:50 · 62 阅读 · 0 评论