JavaSE
文章平均质量分 81
基础
败给你的黑色幽默丶
if i say you're the one would you believe me;
if i ask you to stay would you show me the way
展开
-
【JavaSE】Static
static关键字1.为什么要使用static关键字当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。2.类属性、类方法的设计思想类属性(类变量)作为原创 2022-02-18 10:45:29 · 212 阅读 · 0 评论 -
【Java 并发编程】【05】线程安全问题与线程同步
5. 线程安全问题与线程同步多线程编程是有趣且复杂的事情,它常常容易突然出现“错误情况”,这是由于系统的线程调度具有一定的随机性。即使程序在运行过程中偶尔会出现问题,那也是由于我们的代码有问题导致的。当多个线程访问同一个数据时,非常容易出现线程安全问题。5.1 线程安全问题所谓线程安全问题,其实就是多线程在并发访问的时候,对共享内存中的共享对象的属性进行修改所导致的数据冲突问题Keyword:并发访问共享内存共享对象 (共享内存中的共享对象)属性的修改 (方法是在栈中,不会有并发问题)原创 2022-01-21 14:13:19 · 2984 阅读 · 0 评论 -
【Java 并发编程】【04】线程的生命周期
4 线程的生命周期一个完整的生命周期中通常要经历如下的五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)。CPU需要在多条线程之间切换,于是线程状态会多次在运行、阻塞、就绪之间切换。1.新建new之后当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状。此时它和其他Java对象一样,仅仅由JVM为其分配了内存,并初始化了实例变量的值。此时的线程对象并没有任何线程的动态特征,程序也不会执行它的线程体run()。2原创 2022-01-21 14:12:03 · 61 阅读 · 0 评论 -
【Java 并发编程】【03】Thread类API
3 .Thread类API3.1 创建线程对象相关构造器:Thread():创建新的Thread对象Thread(String threadname):创建线程并指定线程实例名Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法Thread(Runnable target, String name):创建新的Thread对象,并命名线程体和启动线程:public void run():子类必须重写run()以编写线程体pu原创 2022-01-21 14:11:13 · 436 阅读 · 0 评论 -
【Java 并发编程】【02】线程的创建和启动
2. 线程的创建和启动Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的对象。每个线程的作用是完成一定的任务,实际上就是执行一段代码,我们称之为线程执行体。Java使用run方法来封装这段代码,即run方法的方法体就是线程执行体。方式一:继承Thread类创建线程类通过继承Thread类来创建并启动多线程的步骤如下:(1)定义继承Thread的子类,并重写该类的run()。查看Thread类的源代码,发现当我们没有传target时,那么Thread类的run()就是一原创 2022-01-21 14:09:44 · 240 阅读 · 0 评论 -
【Java 并发编程】【01】线程概述及应用
多线程相关知识:1.JavaSE : 多线程基础2.JUC : 多线程高级一些概念:1.程序: 完成某个任务、功能 用某种语言编写的一组指令的集合。2.软件: 软件 = 程序 + 程序运行所需文件 一个软件中可能有很多个程序3.进程: 程序的一次运行。一个进程就是一个正在运行中的程序,可以看做是一款软件对应一个进程;每个软件(每个进程)之间是独立的,操作系统在分配资源(内存)的时候,是以进程为单位的。因此进程之间进行通信(交换数据)时,成本比较高,相当于两个软件之间进行通信。原创 2022-01-21 14:07:08 · 485 阅读 · 0 评论 -
【JavaSE】【集合】HashMap1.8
2.JDK1.8 HashMap参考博文:https://blog.csdn.net/v123411739/article/details/78996181 JDK 1.8 对 HashMap 进行了比较大的优化,底层实现由之前的 “数组+链表” 改为 “数组+链表+红黑树”; JDK 1.8 的 HashMap 的数据结构如下图所示,当链表节点较少时仍然是以链表存在,当链表节点较多时会转为红黑树。1、基本属性// 默认容量16static final int DEFAULT_INITIA原创 2022-01-05 18:14:01 · 783 阅读 · 0 评论 -
【JavaSE】【集合】HashMap1.7
JDK1.7 HashMap1、存储结构EntryHashMap的内部存储结构是数组和链表的结合;其中数组的元素类型就是Entry类型;HashMap的存储单元为Entry,是HashMap中的一个静态内部类;和链表中的Node类是一样的,作为底层数据的存储容器;每一个Entry包含一个key-value键值对。代码如下:static class Entry<K,V> implements Map.Entry<K,V> { final K key;原创 2022-01-05 18:13:05 · 543 阅读 · 1 评论 -
【JavaSE】【集合】LinkedList
在数组/ArrayList中读取和存储(get/set)的性能非常高,为O(1),但插入(add(int index, E element))和删除(remove(int index))却花费了O(N)时间,效率并不高。今天我们来看Java中的另一种List即LinkedList,LinkedList是基于双向链表来实现的LinkedList1.内部类Node节点有两个指针,说明是双向链表private static class Node<E> { E item; No原创 2022-01-05 15:29:05 · 115 阅读 · 0 评论 -
【JavaSE】【集合】ArrayList & Vector
ArrayList1. ArrayList的无参构造public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}知识点1: 底层是Object数组知识点2: 通过无参构造创建的ArrayList,其底层存储结构是一个缓存在方法区的空数组知识点3: 为了避免我们反复的创建无用数组,所有通过无参构造new出来的ArrayList底层数组都指向缓存在方法区里的Object[]数组知识点4: .原创 2022-01-05 14:54:26 · 69 阅读 · 0 评论 -
【JavaSE】【常用类05】 枚举类
手动定义枚举类public class Season { //todo 2.定义静态常量属性,类型为自己 public static final Season SPRING = new Season(); public static final Season SUMMER = new Season(); public static final Season AUTUMN = new Season(); public static final Season WINT原创 2021-12-30 11:32:58 · 55 阅读 · 0 评论 -
【JavaSE】【面向对象11】abstract & interface
abstract1、抽象方法用abstract来修饰一个方法时,该方法叫做抽象方法。抽象方法:只有方法的声明,没有方法的实现,以分号结束:含有抽象方法的类必须是抽象类子类继承抽象类时,子类也会继承父类的抽象方法,因此必须对父类的抽象方法进行重写(实现),否则子类也得是抽象类2、抽象类使用abstract修饰的类称为“抽象类”拥有一个或者多个抽象方法的类“必须”是抽象类抽象类不能直接创建对象,即不能实例化有时抽象类中没有抽象方法,(目的只有一个:不让你创建对象)抽象类就是用来被继承原创 2021-12-30 11:03:07 · 283 阅读 · 0 评论 -
【JavaSE】【面向对象09】面向对象三大特征---多态
面向对象的基本特征之三:多态Polymorphism1、什么是多态java中(1)方法的多态重载:在一个类中一个方法功能的多种表现形态重写:父子类对于同一个方法表现出不同的形式(2)对象的多态若编译时类型和运行时类型不一致,就出现多态(Polymorphism)Java程序的编译运行分为两种状态:在多态的情况下编译时,“看左边”,看的是父类的引用(父类中不具备子类特有的方法)运行时,“看右边”,看的是子类的对象(实际运行的是子类重写父类的方法)注意:这里说的是一个对象实际运行的方原创 2021-12-30 09:58:39 · 241 阅读 · 0 评论 -
【JavaSE】【面向对象08】面向对象三大特征---继承
面向对象的基本特征之二:继承Inheritance1、为什么要有继承?当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。提高了代码的复用性。继承的出现让类与类之间产生了关系,可以创建更为特殊的类型。利于可维护性。此处的多个类称为子类(派生类SubClass),单独的这个类称为父类(基类或超类SuperClass)。可以理解为:“子类 is a 父类”2、如何继承?类继承语法规则:class Subclass原创 2021-12-30 09:58:46 · 128 阅读 · 0 评论 -
【JavaSE】【面向对象06】类的五大成员之内部类
类的成员之五:内部类Inner Class1、为什么要有内部类1.内部类场景当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。2.内部类特点声明为内部类可以直接使用访问外部类的所有的成员,包括私有的.3.源代码示例:JRE核心类库集合的迭代器大量使用内部类;每一个集合实现类都有个迭代器内部类2、内部类的分类(1) 静态内部类(2)非静态内部类:成员内部类局部内部类匿名内部类3、成员内部原创 2021-12-30 09:27:13 · 103 阅读 · 0 评论 -
【JavaSE】【面向对象05】类的五大成员之代码块 & 属性初始化过程
类的成员之四:代码块代码块的作用:一般来说是用于类或实例成员变量的初始化;代码块有两种:分为静态代码块和非静态代码块(构造代码块)1、静态代码块(1)可以为类变量(静态的属性)初始化(2)随着类的初始化而初始化,只执行一次(3)如果子类初始化时,它的父类没有初始化会先初始化父类(4)在静态代码块中不能访问非静态成员(属性、方法、内部类)(5)在静态代码块中不能使用this和super关键字如果有重名问题,需要访问本类或父类的静态成员,那么可以使用“本类名.xx”、“父类名.xx”如果没有原创 2021-12-30 09:26:58 · 198 阅读 · 0 评论 -
【JavaSE】【面向对象04】this & final
this关键字this表示当前对象(1)在方法内部使用,即表示调用该方法的对象(2)在构造方法中使用,即表示正在初始化的对象用法:1. this.属性(1)当构造器或方法中有局部变量与实例变量同名时,用于区分局部变量和实例变量。格式:this.属性(2)当构造器或方法中没有局部变量与实例变量同名时,可以不加this.2. this.方法表示调用当前对象的其他方法,通常情况下,省略this.3. this()或this(实参列表)用于调用本类的其他构造方法,必须写在构造器的首行,要避免原创 2021-12-30 09:26:42 · 191 阅读 · 0 评论 -
【Java 8】Stream和方法引用
第一章 Stream流1.1 引言(1)传统集合的多步遍历代码几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如:import java.util.ArrayList;import java.util.List;public class Demo01ForEach {public static void main(String[] args) {.原创 2021-12-05 23:29:29 · 464 阅读 · 0 评论 -
【Java 8】函数式接口
函数式接口主要内容教学目标第一章 函数式接口1.1 概念1.2 函数式接口的格式1.3 @FunctionalInterface注解1.4 函数式接口的使用1.5 Lambda语法格式1.6 Lambda和匿名函数的区别第二章 函数式编程2.1 Lambda的延迟执行性能浪费的日志案例体验Lambda的更优写法2.2 使用Lambda作为参数和返回值第三章 常用函数式接口3.1 Supplier接口3.2 练习:求数组元素最大值主要内容自定义函数式接口函数式编程常用函数式接口教学目标原创 2021-12-04 20:48:03 · 166 阅读 · 0 评论 -
【JavaSE】【集合】 Map
Map 中的 key 和 value 都可以是任何引用类型的数据;key通常使用不可变对象,比如String和IntegerMap 中的 key 不允许重复key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。API1、添加操作Object put(Object key,Object value):如何key重复,会覆盖前面的valuevoid putAll(Map t)2、删除void clear()Object remove(O原创 2021-12-03 01:13:27 · 277 阅读 · 0 评论 -
【JavaSE】【面向对象10】UML类图&对象的关联关系
类图表示法类名属性(field)方法(method)三者之间分割开来属性/方法名称前加的加号和减号表示了这个属性/方法的可见性,UML类图中表示可见性的符号有三种:+:表示public-:表示private#:表示protected属性的完整表示方式是: 可见性 名称 :类型 [ = 缺省值]方法的完整表示方式是: 可见性 名称(参数列表) [ : 返回类型]注意: 1,中括号中的内容表示是可选的 2,也有将类型放在变量名前面,返回值类型放在方法名前面类之原创 2021-11-14 01:29:52 · 727 阅读 · 0 评论 -
【JavaSE 16】 反射机制
类的加载1.类加载的功能:将类的二进制文本数据(就是java源代码文件经过编译后的.class 字节码文件)加载到JVM内存中,将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象2.Class对象的作用:作为方法区中类数据的访问入口(即引用地址),所有需要访问和使用类数据只能通过这个Class对象3.类加载发生时机:第一次使用某个类的时候;4.类加载器 : 类加载的工作由类加载器完成,类加载器通常由JVM提供,由JVM提供的这些类加载器通常被称为系原创 2021-09-28 16:27:20 · 107 阅读 · 1 评论 -
【Java 并发编程】【06】线程通信
第14章多线程14.1 线程概述14.1.1 进程14.1.2 线程14.2 线程的创建和启动14.2.1 方式一:继承Thread类创建线程类14.2.2 方式2:实现Runnable接口14.2.3 继承Thread类和实现Runnable接口两种方式的区别14.4 Thread类的方法14.4.1 创建线程对象相关14.4.2 获取和设置线程信息14.4.3 控制线程1、线程睡眠:sleep2、线程让步:yield3、线程加塞:join案例1多线程相关知识:1.JavaSE : 多线程基础2.J原创 2021-09-27 15:16:56 · 90 阅读 · 0 评论 -
【JavaSE】【集合】Collection & List
集合就是容器,能够容纳多个数据单位;研究集合,其实就是研究:1.其底层是如何存储数据的2.数据的增删改查特性1.集合体系1.1 value型集合图中虚线都是接口,实现是1.2 key-value型集合原创 2021-09-23 12:37:49 · 68 阅读 · 0 评论 -
【JavaSE】【面向对象03】类的五大成员之构造器
类的成员之三:构造器类的五个核心成员:属性提供数据;方法 提供操作;构造器和代码块都是对属性进行初始化的;内部类 其实和属性是一个性质,也是属于类的数据部分1、构造器格式[访问控制修饰符] 类名(){}或[访问控制修饰符] 类名(形参列表){}2、作用(1)与new一起使用创建对象(2)为对象属性进行初始化赋值3、特点(1)构造器的名称必须与类名相同(2)构造器没有返回值类型(3)若一个类中没有显式的提供任何构造器时,系统会为其提供一个默认的无参构造器。(4)原创 2021-09-10 11:25:29 · 89 阅读 · 0 评论 -
【JavaSE】【面向对象02】类的五大成员之方法
类的成员之二:方法1.方法的声明方法声明的位置类中方法外方法的声明格式[权限修饰符] [修饰符] 返回值类型 方法名([形参列表]){ //方法体:实现功能的语句}2.方法参数的值传递机制形参是一个方法(栈帧)中的局部变量表中的变量,方法在执行的时候,是通过这些局部变量来做运算的,因此值传递就是指 在调用方法的时候,将实际参数传递给局部变量;(1)基本数据类型形参:实参给形参传的是 “数据值” ,形参值的修改不会影响实参(2)引用数据类型形参:实参给形参传的是 “地址原创 2021-09-10 11:01:56 · 115 阅读 · 0 评论 -
【JavaSE】【常用类01】Object类
Object类是java.lang包下的核心类,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入,Object类是所有类的父类,何一个类时候如果没有明确的继承一个父类的话,那么它就是Object的子类;以下两种类的定义的最终效果是完全相同的:class Person { }class Person extends Object { }Object 类的11 个方法1) clone()1.方法声明(1)原创 2021-08-19 16:15:53 · 116 阅读 · 0 评论 -
【JavaSE】【常用类02】 包装类
包装类其实就是将基本数据类型封装成类的一个属性,然后定义了一系列的方法来操作该基本类型的值以Integer为例:public final class Integer extends Number implements Comparable<Integer> {...//底层存储的数据private final int value;//构造器public Integer(int value) { this.value = value;}...}1.为什么需要原创 2021-08-23 11:32:12 · 94 阅读 · 0 评论 -
【JavaSE】【常用类04】 System&日期类&Math
System声明:public final class System {...}1.输入输出流三个静态属性: public final static InputStream in = null; //“标准”输入流。 public final static PrintStream out = null; //“标准”输出流。 public final static PrintStream err = null; //“标准”错误输出流。class原创 2021-08-24 15:07:41 · 96 阅读 · 0 评论 -
【JavaSE】【常用类06】注解Annotation
注解Annotation是从JDK5.0开始引入的新特性。1. Annotation的作用注解不是程序本身,可以对程序作出解释。(这一点,跟注释没什么区别)可以被其他程序(比如:编译器,Checker Framework等)读取。(注解信息处理流程,是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义;javadoc.exe就是这些注解的信息处理流程)2. Annotation的格式注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(原创 2021-07-29 14:47:24 · 99 阅读 · 0 评论 -
【JavaSE】【常用类03】String
String一、String类声明二、String类底层存储结构三、String对象的不变性四、字符串常量池1.到底什么是常量?2.字符串常量池五、字符串对象的创建1.直接引用字符串常量2.new String("xxx")空字符串的三种创建方式3.new String(char[] arr)字符串拼接(1)字符串变量的拼接(2)字符串常量的拼接开发中字符串判空字符串比较String类的常用方法String类和字符相关操作String类和字节相关操作String类判断是否以指定内容开头或结尾String类字原创 2021-08-24 11:11:49 · 135 阅读 · 0 评论 -
【JavaSE】【面向对象07】面向对象三大特征---封装&包
封装面向对象三大特征之一:封装包1、包的作用2、package3、import4、编译时使用-d选项5、使用jar命令打包应用程序6、JDK中主要的包介绍面向对象三大特征之一:封装什么是封装(Encapsulation)?把类中该隐藏的隐藏起来,该暴露的暴露出来`封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类。类通常对客户隐藏其实现细节,这就是封装的思想。封装的实现封装需要通过访问控制修饰符(权限修饰符)来实现.四大访问权限修饰符:public:公共的,可用原创 2021-08-05 15:29:43 · 80 阅读 · 0 评论 -
【JavaSE】 【基础语法01】标识符&关键字
一、标识符变量、方法名和类名等使用的字符序列称为标识符。1、标识符命名规则由26个英文字母大小写,0-9 ,_或 $ 组成数字不可以开头,不能包含空格不可以使用关键字和保留字区分大小写,长度无限制。2、标识符命名规范包名:xxxyyyzzz类名、接口名:XxxYyyZzz变量名、方法名:xxxYyyZzz常量名:XXX_YYY_ZZZ二、关键字、保留字、特殊值关键字、保留字和特殊值:全部小写(50+3)(1)关键字关键字: 在Java中被赋予的特定含义的单词基本数据类原创 2021-08-19 15:24:50 · 3439 阅读 · 0 评论 -
【JavaSE】 【基础语法02】 变量&常量
JavaSE基础语法一、变量变量的声明和初始化成员变量局部变量2.常量一、变量变量的作用:保存数据变量的本质:内存的一块存储区域变量的三要素:数据类型、变量名、变量值数据类型:决定内存大小,可以存什么值变量名:如何访问这块存储区域变量值:里面存储的数据变量的声明和初始化声明变量语法·: 数据类型 变量名;//例: int i;变量赋值:变量名 = 变量值;注意:声明变量和变量的赋值可以同时进行,也可以分开进行。变量在被访问(读取)之前,必须有值例如:数据类型 变量名原创 2021-09-08 13:03:57 · 61 阅读 · 0 评论 -
【JavaSE】【基础语法03】数据类型
JavaSE基础语法一、数据类型1.1 基本数据类型转换1.2 引用数据类型转换一、数据类型byte 1个字节(8bit),取值范围-128~127,默认值0short 2个字节(16bit),取值范围-32768~32717,默认值0int 4个字节(32bit),取值范围-2147483648~2147483647,默认值0long 8个字节(64bit),-263~ 263-1,默认值0Lfloat 4个字节(32bit),用于存储带小数点的数字(与double的区别在原创 2021-09-08 13:25:42 · 171 阅读 · 0 评论 -
【JavaSE】【基础语法06】数组
一、数组的相关概念1、数组的相关概念[了解]数组(Array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。例如:int[] scores = {80,90,87,68,99,100,79,96}; 元素1:scores[0]=80; 数组的长度为8原创 2021-08-19 15:38:58 · 213 阅读 · 0 评论 -
【JavaSE】【基础语法05】流程控制
流程控制1.顺序结构2.分支结构2.1 if单分支2.2 if...else双分支2.3 if...else if多分支条件语句2.4 选择分支3. 循环结构1、顺序:从上往下执行2、分支3、循环1.顺序结构2.分支结构2.1 if单分支if(条件表达式){//当条件表达式结果为true时,需要执行的语句块}说明:(1)条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。(2)语句块只有一个语句时,{}可以省略,但是建议保留执行过程:条件成立就执行,条件不成立就不执原创 2021-09-08 13:38:13 · 97 阅读 · 0 评论 -
【JavaSE】【基础语法04】进制&原码反码补码&运算符
JavaSE基础语法一、进制1.1 进制转换1.1.1 二进制与十进制之间的转换1.1.2 二进制 八进制 十六进制互转1.1.3 十进制与八进制或十进制与十六进制之间的转换二、原码反码补码0、 数字在计算机内部的存储形式1、原码2、反码3、补码4、-128二、运算符1、算术运算符一、进制位(bit) — 计算机中最小的存储单位字节(byte) — 计算机中基本的存储单元 (最小的数据单位为字节)1byte = 8bits、1KB = 1024Byte、1MB = 1024KB、1GB =原创 2021-09-08 13:37:21 · 166 阅读 · 0 评论 -
【JavaSE】【面向对象01】类的五大成员之属性
面向对象(OOP)编程思想1.面向过程(POP)编程思想数据仅仅作为输入和输出存在;在程序设计中主要以函数或者过程为程序的基本组织方式,程序的最小单元是函数。2.面向对象(OOP)编程思想把数据和与这些数据相关的行为放在一起,用一个叫做类的东西装起来,程序的最小单元变成了类。面向对象的学习主线:(1)类与对象(2)面向对象的基本特征和高级特性(3)相关关键字和API 类的五大成员 基本特征:封装、继承、多态 高级特征:抽象类、接口 关键字:this、super、static、fin原创 2021-08-05 15:31:08 · 456 阅读 · 0 评论