JavaSE
文章平均质量分 63
Java基础教程
Rsun04551
也许当我老了,也一样Code;不为别的,只为了爱好。
展开
-
Java中内存模型
基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对象,并将其x属性的值改为6.show方法弹栈。由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。原创 2024-01-10 12:28:42 · 410 阅读 · 0 评论 -
Java开发学习路线
这些是初级Java开发工程师应该掌握的核心技术和知识,随着经验的积累,你可以深入研究更多高级主题和相关领域,如JavaEE、微服务架构、前端开发等,以提升自己的职业发展。Java高级开发工程师需要具备广泛的知识储备和丰富的实战经验,能够独立负责复杂项目的设计、开发和部署,同时具备解决系统性能和安全问题的能力。Java高级开发工程师需要具备深入的技术功底和广泛的实战经验,同时要对系统架构设计和性能优化有较高的理解。这些技术和知识将帮助中级Java开发工程师在开发更复杂的应用程序和系统时更加自信和高效。原创 2023-10-07 15:50:15 · 138 阅读 · 0 评论 -
Java中的super关键字
是Java中的一个关键字,它可以用来引用当前对象的父类(超类)的成员变量或方法。关键字可以用于在子类中访问父类的成员、调用父类的构造方法以及调用父类的方法,从而实现对父类的重用。原创 2023-09-26 18:19:18 · 771 阅读 · 0 评论 -
Java中的全局变量和局部变量(看这篇就够了)
在Java中,全局变量和局部变量是两种不同作用域的变量。原创 2023-09-25 21:24:26 · 7387 阅读 · 0 评论 -
Java中final关键字(看这篇就够了)
是 Java 中的一个关键字,它可以用于变量、方法和类,具有不同的含义:final 变量: 变量一旦被初始化,就不能再被赋值。final 方法:final 类:final 参数: 关键字的主要作用是为了保证变量、方法或类的不可变性,从而提高代码的安全性和可靠性。在开发过程中,合理地使用 可以避免一些意外的修改,使得代码更加健壮。原创 2023-09-26 09:27:43 · 68 阅读 · 0 评论 -
Java中的接口(看这篇就够了)
在Java中,接口(Interface)是一种抽象类型,它定义了一组抽象方法和常量(也可以没有方法或常量)。接口是一种约定,它规定了某一类对象应该具有的行为。接口在Java中是一种非常重要的概念,它提供了一种方式来组织和规范代码的结构,支持了更灵活的多态性。Java 8 引入了接口的默认方法,可以在接口中提供方法的默认实现。Java 8 还引入了接口中的静态方法。类可以实现一个或多个接口,通过。一个接口可以继承多个接口。原创 2023-09-26 10:15:56 · 76 阅读 · 0 评论 -
Java中的抽象类(看这篇就够了)
在Java中,抽象类(Abstract Class)是一种不能被实例化的类,它通常用于作为其他类的基类,提供一些通用的行为和结构。抽象类是Java中面向对象编程的重要组成部分,它提供了一种方式来设计和组织类的层次结构,同时也提供了一定程度的代码复用性。子类可以继承抽象类,但如果子类没有实现抽象类中的所有抽象方法,那么该子类也必须声明为抽象类。抽象类可以包含静态成员(静态字段和静态方法),它们与普通类的静态成员的性质相同。抽象类中可以包含抽象方法,这些方法没有方法体,只是声明,需要在子类中实现。原创 2023-09-26 10:17:34 · 524 阅读 · 0 评论 -
Java中的匿名内部类(看这篇就够了)
在Java 8及以后的版本中,引入了Lambda表达式,它提供了一种更简洁的方式来实现函数式接口(只有一个抽象方法的接口)。匿名内部类是Java语言中的一个强大的特性,它可以简化代码,使代码更具可读性和紧凑性,尤其在一些临时性的场景下,可以很方便地使用匿名内部类来实现相应的功能。匿名内部类通常用于创建实现某个接口或继承某个类的子类的对象。它没有类名,直接继承或实现某个类或接口,并且可以在同一行中创建对象。匿名内部类是一种没有名称的局部内部类,它通常用于创建只需使用一次的类的实例。接口的匿名内部类对象。原创 2023-09-26 10:18:56 · 2751 阅读 · 0 评论 -
Java中static关键字
是 Java 中的一个关键字,它可以用来修饰变量、方法和代码块。它的主要作用是表示某个成员是属于类级别的,而不是实例级别的。关键字的使用场景主要是在多个对象之间共享某个属性或方法,或者在不需要实例化对象的情况下使用类的成员。Java 中的内部类可以被声明为静态类,这样它将成为外部类的一个静态成员。可以用于导入一个类的静态成员,使得可以直接使用该成员,而不用通过类名。静态变量是属于类的,而不是属于实例的。所有实例共享同一个静态变量的值。静态方法属于类,可以通过类名直接调用,而不需要先实例化对象。原创 2023-09-26 09:25:29 · 85 阅读 · 0 评论 -
Java中this关键字
主要用于在类的方法中引用当前对象,帮助区分成员变量和方法参数,以及在构造方法中调用其他构造方法。是一个关键字,代表当前对象的引用。原创 2023-09-26 09:22:02 · 103 阅读 · 0 评论 -
Java中的方法(看这篇就够了)
在Java中,构造方法是类的特殊方法,用于初始化对象的实例变量和执行其他必要的操作,以便使对象能够正确地工作。构造方法与类同名,没有返回类型,并且在创建对象时自动调用。构造方法是Java面向对象编程中非常重要的一部分,它用于确保对象的初始化过程是合理、准确的,从而保证对象的正确使用。:如果在类中没有定义任何构造方法,Java会提供一个默认的无参构造方法。:构造方法可以接受参数,用来为对象的实例变量赋初始值。:构造方法在创建对象时自动调用,不能被显式地调用。对象时,会自动调用这个构造方法。原创 2023-09-25 21:34:48 · 1065 阅读 · 0 评论 -
正则表达式相关知识点
正则表达式是一种强大的文本匹配和处理工具,它可以用来在文本中搜索、匹配、替换特定的模式。:正则表达式是编译原理中的重要概念,用于词法分析器(lexer)和语法分析器(parser)的实现。总的来说,正则表达式是一种强大的文本处理工具,可以在各种场景下实现高效的文本匹配和处理操作。:可以用来验证用户输入的数据是否符合指定的格式,比如邮箱格式、电话号码格式、密码复杂度等。:在 web 开发中,可以使用正则表达式来实现灵活的 URL 路由匹配。:在网络爬虫中,可以使用正则表达式来匹配和提取目标网页中的信息。原创 2023-09-25 08:55:57 · 221 阅读 · 0 评论 -
String类中常用方法的作用
提取子字符串,第一个方法从指定索引开始到字符串末尾,第二个方法从指定索引开始到指定索引结束。类是Java中常用的字符串类,提供了许多用于操作字符串的方法。比较字符串的大小,返回负数、零或正数,用于字符串的字典序比较。返回字符串对象的规范化表示,用于将字符串添加到字符串常量池中。将当前字符串与指定字符串连接起来,生成一个新的字符串。和 lastIndexOf(String str)类的基本操作,使得字符串的处理更加方便。查找指定子字符串在字符串中的位置。替换字符串中的字符或子字符串。原创 2023-08-14 10:28:01 · 287 阅读 · 0 评论 -
Synchronized和Lock的区别
在分布式开发中,锁是控制线程安全的重要方式。Java提供了两种锁机制synchronized 和 Lock。原创 2023-02-12 19:58:16 · 334 阅读 · 0 评论 -
Java线程池应用实例
线程池是多线程的一种处理方式,处理过程中将任务添加到队列中,线程创建完成后自动启动这些任务,任务就是实现了Runnable或Callable接口的实例对象。可以根据系统需求和硬件环境灵活控制线程的数量,对线程进行统一管理。3、12306网上购票。原创 2023-01-25 19:51:17 · 5587 阅读 · 2 评论 -
Java线程池(超详细)
抽象类,实现了ExecutorService。原创 2023-01-25 16:07:56 · 1206 阅读 · 0 评论 -
Java中的枚举(看这篇就够了)
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。原创 2023-01-22 15:18:50 · 402 阅读 · 0 评论 -
Java 注解(Annotation)
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容。当然它也支持自定义 Java 标注。原创 2023-01-08 09:19:47 · 85 阅读 · 0 评论 -
Json数据格式
JSON 基本使用原创 2022-09-19 14:21:11 · 142 阅读 · 0 评论 -
HashMap中套map的作用
map套map就是将前一个map中的数据填充到map中(必须保证两个集合中的泛型一致)public static void main(String[] args) { HashMap<String, String> hashMap = new HashMap<>(); hashMap.put("1", "11"); hashMap.put("3","33"); HashMap<String, String>原创 2021-07-20 20:10:29 · 373 阅读 · 0 评论 -
为什么计算机要用补码的方式来表示负数?
在回答这个问题前,我们假设不用补码的方式来表示负数,而只是把最高位的符号标志位变为 1 表示负数,如果采用这种方式来表示负数的二进制的话,试想一下 -2 + 1 的运算过程,如下图:按道理-2 + 1 = -1,但是上面的运算过程中得到结果却是 -3,所可以发现,这种负数的表示方式是不能用常规的加法来计算了,就需要特殊处理,要先判断数字是否为负数,如果是负数就要把加法操作变成减法操作才可以得到正确对结果,比如上述通过判断-2为负数,表达式转成-2-1,最后的运算结果刚好是-1,这就非常不好了,毕竟加减原创 2021-05-13 17:05:36 · 445 阅读 · 1 评论 -
多线程死锁的产生以及如何避免死锁
1、什么是死锁指多个线程因竞争资源而造成的一种僵局(互相等待),具体代码就是同步中嵌套了其他同步,这种现象称为死锁:比如过独木桥问题,其他锁还有可重入锁、可中断锁、公平锁和同步锁2、产生死锁的原因系统资源的竞争进程请求和释放资源的顺序不对死锁产生的必要条件产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待不剥夺条件:进程原创 2021-05-06 16:20:52 · 594 阅读 · 1 评论 -
JAVA中的native是什么
1、一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现。2、在定义一个native方法时,并不提供实现体(比较像定义一个Java Interface),因为其实现体是由非Java语言在外面实现的。主要是因为JAVA无法对操作系统底层进行操作,但是可以通过jni(java native interface)调用其他语言来实现底层的访问。native主要用于方法上。原创 2021-05-03 00:35:00 · 2197 阅读 · 0 评论 -
为什么 String hashCode 方法选择数字31作为乘子?
1、源码首先看下String源码里的hashCode是如何实现的:public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; }原创 2021-05-03 00:17:38 · 158 阅读 · 0 评论 -
Java中的泛型(看这篇就够了)
因此 在JDK5之后,新增了泛型(Generic)语法,让你在设计API时可以指定类或方法支持泛型,这样的话我们使用API的时候也变得更为简洁,并得到了编译时期的语法检查。)是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。我们来分析下:由于集合中什么类型的元素都可以存储。举个例子,比如:现已知Object类,String 类,Number类,Integer类,其中Number是Integer的父类。之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。原创 2021-04-28 16:48:36 · 234 阅读 · 0 评论 -
如何让线程池里面的线程按照顺序执行?
笔者今天看到一个有趣的面试题,如何让多个线程按照既定的顺序依次执行?比如每个线程输出一个整数,那么期望就是这样的:0,1,2,3,4,5,6,7,8,9.而不是0,2,4,1,3,5,8,7,9,6乍一看,这不是反人性的考题吗?多线程本来就以乱序执行出名的。稍加思索,想到3种解决方案,分别用代码实现之。方法1: 使用join方法方法2:使用newSingleThreadExecutor方法3:使用ThreadPoolExecutor,设置它的核心线程数为1。原创 2021-04-13 16:56:28 · 6350 阅读 · 5 评论 -
8、集合和泛型
数据存储的常用结构有:堆栈:先进后出,像个容器,入口和出口都是栈顶、压栈和弹栈都是操作栈顶元素。队列:先进先出、队列的入口和出口各占一侧。数组:通过索引查找元素速度快;增删元素速度慢。链表:多节点之间通过地址连接,增删只需要修改下个元素的地址速度比较快,没有索引位置查找速度比较慢。0、Colllection集合中存放的数据都是引用数据类型,基本类型需要自动装箱,公有的方法有增删改查方法。ArrayList继承AbstractList抽象类,实现List接口,而List接口又继承于Collecti原创 2021-04-10 14:07:25 · 93 阅读 · 0 评论 -
List有序可重复,Set无序不重复!
List是有序且重复的,Set是无序不重复的。这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序a-z排列。Set并不是无序的,传统说的Set无序是指HashSet,它不能保证元素的添加顺序,更不能保证自然顺序,而Set的其他实现类是可以实现这两种顺序的。保证元素添加的顺序,不保证元素自然的顺序,可重复:List不保证元素添加的顺序,不保证元素自然的顺序,不可重复:HashSet保...原创 2020-02-14 21:57:48 · 2497 阅读 · 0 评论 -
List集合如何去重?
将list集合放入LinkedHashSet集合中,然后再重新添加到list集合中。\color{#FF0000}{将list集合放入LinkedHashSet集合中,然后再重新添加到list集合中。}将list集合放入LinkedHashSet集合中,然后再重新添加到list集合中。实例:package com.xhy.xczx.test;import java.util.*;/**...原创 2020-02-14 22:19:28 · 1402 阅读 · 0 评论 -
Java Map集合的几种遍历方式与性能对比(包含lambda表达式)
实例代码如下:public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value1"); map.put("key2", "value2"); ...原创 2020-02-15 10:45:21 · 892 阅读 · 1 评论 -
6、包装类及其相关
①包装类1、其中需要注意int对应的是Integer,char对应的Character,其他6个都是基本类型首字母大写即可。2、字符串转成基本类型:包装类.parseInt(str);3、基本数值转成字符串有3种方式:(1)、基本类型直接与” ”相连接即可;34+""(2)、调用包装类中的toString方法;Integer.toString(34);(3)、调用String的valueOf方法;String.valueOf(34);4、基本数值---->包装对象(1)、Integer原创 2021-04-10 14:04:35 · 141 阅读 · 0 评论 -
15-Java设计模式
,这样,在它的赋值完成之前,就不用会调用读操作。应用实例:1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。只有指明具体的子类,才可以用来定义对象,例如:带空心箭头的虚线,车由自行车来实现其具体的功能。4、创建监工Director类,编写建造房子build方法,方法体里调用创建地基、钢筋工程、铺电线、粉刷四个方法,并返回House对象。创建电视和汽车接口,创建具体类来实现,然后创建工厂接口,创建具体工厂类实现工厂接口,在测试类中创建具体工厂类,调用其中的方法。原创 2021-04-10 13:55:56 · 187 阅读 · 0 评论 -
11-网络编程
Reflection经典的Person类package reflect;//定义姓名和年龄public class Person {// 先public后私有化public String name;private int age;public Person() {}private Person(String name) { super(); this.name = name;}public Person(int age) { super(); this.age = age;原创 2021-04-10 13:50:40 · 104 阅读 · 0 评论 -
05-异常
1、概念异常:Java代码在运行时期发生的问题叫做异常,当发生问题时,就会创建异常对象并抛出异常信息(异常的原因及位置)2、异常的分类Error,Exception extends Throwable extends ObjectRuntimeException extends ExceptionError:往往是JVM所在的系统出现问题,我们无法针对处理,只能修正代码。内存溢出错误OutOfMemoryErrorException:指编译和运行时期出现的异常。数组索引越界异常ArrayInde原创 2021-04-10 13:48:14 · 109 阅读 · 0 评论 -
04-三大特征、变量、构造方法this、static、final关键字
3、多态:多态就是用同样的对象引用调用同样的方法但是做了不同的事情,多态性分为编译时的多态性和运行时的多态性,方法重载(overload)实现的是编译时的多态,而方法重写(override)实现的是运行时的多态性,运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1. 方法重写(子类继承父类并重写父类中已有的方法);全局变量也叫成员变量,是指在类中定义的变量;当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。原创 2021-04-10 13:46:34 · 235 阅读 · 0 评论 -
Java抽象类
抽象方法:只定义方法不实现方法体的方法抽象类:被abstract修饰的类,不能被实例化,继承的子类必须实现抽象类中的方法//有抽象方法的类必须被声明为abstract public abstract class Test1 {//不带"{}"的方法叫抽象方法 public abstract void f();原创 2020-10-11 11:15:28 · 903 阅读 · 1 评论 -
Java中的反射(看这篇就够了)
在运行状态中,对于任意一个对象,都能够知道这个对象的所有属性和方法;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制//成员变量//构造方法System.out.println("空参数构造方法");System.out.println("带有String的构造方法");//私有的构造方法System.out.println("带有String,int的构造方法");原创 2021-04-10 13:52:49 · 200 阅读 · 0 评论 -
“==“和equals方法有什么区别(面试)
1.简述" == " 比较的是值" == " 如果比较的是基本数据类型,比较的则是变量值" == " 如果比较的为引用数据类型,比较的则是地址值equals比较的是引用数据类型如果没有重写hashCode和equals方法,比较的是地址值。因为Object的equals方法中使用是" == " 。如果重写hashCode和equals方法,则比较的重写后的规则。2.代码演示/*** 等号 ==*/public class TestEq { public static void原创 2020-10-11 09:59:58 · 630 阅读 · 2 评论 -
Java中有几种基本数据类型?所占用的字节分别为多少?
2、如果一个整数的值超出了int类型能够表示的范围,则必须增加后缀“L”(不区分大小写,建议用大写,因为小写的L与阿拉伯数字1很容易混淆),表示为long型。4、编译器会在编译期对byte、short、int、long、float、double、char型变量的值进行检查,如果超出了它们的取值范围就会报错。浮点数默认为double类型,因此long类型后要加L,float类型后缀要加F。1、bit --比特位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为0或1。原创 2020-10-11 09:40:26 · 1895 阅读 · 3 评论 -
String,StringBuffer和StringBuilder的区别及使用场景
String:字符串常量 。StringBuffer 与 StringBuilder是字符缓冲变量。StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer中的方法大都采用了synchronized 关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。StringBuilder 是在JDK1.5才加入的。jdk的实现中StringBuffer与StringBuilder都继承自AbstractSt原创 2020-10-11 09:18:04 · 1818 阅读 · 0 评论