Java
文章平均质量分 78
JFS_Study
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
展开
-
序列化和反序列化
一、序列化:将 Java 对象转换成字节流的过程1️⃣序列化过程:是指把一个 Java 对象变成二进制内容,实质上就是一个 byte[]。因为序列化后可以把 byte[] 保存到文件中,或者把 byte[] 通过网络传输到远程(IO),如此就相当于把 Java 对象存储到文件或者通过网络传输出去了。2️⃣一个 Java 对象要能序列化,必须实现一个特殊的java.io.Serializable接口,它的定义如下:public interface Serializable {}Serializab.原创 2022-01-17 10:21:26 · 31543 阅读 · 3 评论 -
Java反射:框架设计的灵魂
Java 在运行时识别对象和类的信息,主要有两种方式:一种是传统的RTTI(Run-Time Type Identification),它假定在编译时已经知道了所有的类型信息;另一种是反射机制,它允许在运行时发现和使用类的信息。使用的前提条件:必须先得到目标类的字节码的 Class,Class 类用于表示.class文件(字节码)一、反射的概述Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调原创 2021-07-29 15:08:08 · 260 阅读 · 0 评论 -
本地FTP服务器快速搭建(windows)
在【开始】菜单搜索“IIS”并点击进入IIS管理器。原创 2022-09-03 10:54:41 · 1622 阅读 · 0 评论 -
Java 局部类访问的局部变量用 final 修饰的原因
一、内部类1️⃣作为其外部类成员的内部类,称为成员内部类。除另有说明外,“内部类”通常是指成员内部类。2️⃣局部类和匿名类是内部类的两个特殊的类型:在方法体中声明的内部类,称为局部内部类,亦称局部类。局部类是有类名的。在方法体中声明的无需命名的内部类,称为匿名内部类,亦称匿名类。匿名类是没有类名的。二、局部变量局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。局部变量的作用域是定义该变量的函数或定义该变量的复合语句。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的原创 2022-05-30 10:56:52 · 2842 阅读 · 1 评论 -
Java 面试汇总
一、private修饰的方法可以通过反射访问,那么private的意义是什么主要抓住两点:Java的private修饰符并不是为了绝对安全性设计的,更多是对用户常规使用Java的一种约束;从外部对对象进行常规调用时,能够看到清晰的类结构。二、Java类初始化顺序基类静态代码块,基类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行)派生类静态代码块,派生类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行)基类普通代码块,基类普通成原创 2022-03-29 09:23:09 · 229 阅读 · 0 评论 -
Socket 编程
Socket概述UDPUDP数据传输流程:以下是代码实现:因为UDP是无连接的不可靠传输,所以接收方需要在发送方发送数据之前就启动,否则会接收不到数据。也就是说必须先运行UDPSocketReceive再运行UDPSocketSend。控制台打印如下:发送方:Sender Start...接受方:Receiver Start...address:/127.0.0.1---port:61177---content:God bless you!聊天实现:package Soc原创 2022-03-28 14:13:12 · 2692 阅读 · 0 评论 -
属性文件操作之 Properties 与 ResourceBundle
一、Properties与ResourceBundle两个类都可以读取属性文件中以key/value形式存储的键值对,ResourceBundle读取属性文件时操作相对简单。二、Properties该类继承Hashtable,将键值对存储在集合中。基于输入流从属性文件中读取键值对,load()方法调用完毕,就与输入流脱离关系,不会自动关闭输入流,需要手动关闭。public class PropertiesRead { /** * 基于输入流读取属性文件:Properties继承了H原创 2022-03-28 14:10:42 · 1274 阅读 · 0 评论 -
Java 读取 properties 文件内容的几种方式
一、通过context:property-placeholder加载配置文件jdbc.properties中的内容<context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>上面的配置和下面配置等价,是对下面配置的简化:<bean id="propertyConfigurer" class="org.springframework.beans.fact原创 2022-03-28 14:08:31 · 2681 阅读 · 0 评论 -
logback 及 logback.xml
一、logback 的介绍Logback 是由 log4j 创始人设计的另一个开源日志组件,官网。它分为以下几个模块:logback-core:其它两个模块的基础模块logback-classic:它是 log4j 的一个改良版本,同时它完整实现了slf4j API,使得很方便地更换成其它日志系统如 log4j 或 JDK14 Logging。logback-access:访问模块与 Servlet 容器集成提供通过 Http 来访问日志的功能。二、logback 取代 log4j 的理由.原创 2022-03-03 16:48:15 · 704 阅读 · 0 评论 -
Denial of Service
//定义一个线程类Mythread实现Runnable接口!!直接跑main方法package com.dosa;import java.io.BufferedInputStream;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.concurrent.ExecutorServi原创 2022-03-03 16:45:29 · 182 阅读 · 0 评论 -
Java 项目和 Web 项目的区别
Java Web 项目是基于 Java EE 类的;而 Java 项目是基于 Java 应用程序的。Java 项目主要面向桌面程序的应用,主要是 awt、swing 这类的编码,不包括 JSP 等前台页面的代码,大部分是 CS 架构的工程和一些 jar 包。JavaWeb 项目是 BS 架构的系统,是网页的编码,像 Jsp、Servlet、Struts这类的,JavaWeb 项目部署到服务器上,任何用户都可以通过浏览器来访问。JavaWeb 项目中的 Java 文件是 tomcat 服务器来触发的,.原创 2022-03-03 16:42:25 · 1391 阅读 · 0 评论 -
Java 字符串为何不可变
String 是 Java 中一个不可变的类,所以它一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。不可变类有很多优势。一、字符串池字符串池是 Java 运行环境方法区中的一部分特殊存储。当一个字符串被创建之时,首先会去这个字符串池中查找,如果找到直接返回对该字符串的引用。下面的代码只会在堆中创建一个字符串:String string1 = "abcd";String string2 = "abcd";如果字符串可变的话,当两个引用指向指向同一个字符串时,对其中一原创 2022-03-03 16:36:42 · 339 阅读 · 0 评论 -
获取 HttpServletRequest 三种方法
一、注解法@Autowiredprivate HttpServletRequest request;二、在方法中直接声明形参有HttpRequest即可public ModelAndView userLandlord(Model model, HttpServletRequest request){ }三、使用一个Listener,然后获取先web.xml配置:<listener> <listener-class> org.spring原创 2022-03-02 09:17:56 · 6532 阅读 · 0 评论 -
Java 的值传递和引用传递
Java 的值传递和引用传递原创 2022-02-28 11:05:48 · 2313 阅读 · 1 评论 -
重载与重写
一、重载(Overloading)建造者模式(Builder Pattern)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名方法同时存在,具有不同的参数个数/类型。重载是一个类中多态性的一种表现。Java 的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就是多态性。重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回值类型作为原创 2022-02-28 11:01:50 · 1040 阅读 · 0 评论 -
Java 四种访问权限
访问权限原创 2022-02-28 10:58:48 · 11408 阅读 · 2 评论 -
位运算:按位与、按位或、按位异或、取反、左移、右移
位运算不管是 Java 还是 C 中,或者其他语言,都会经常用到。位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、右移(>>)这几种,其中除了取反(~)以外,其他的都是二目运算符,即要求运算符左右两侧均有一个运算量。1、补码在总结按位运算前,有必要先介绍下补码的知识,我们知道当将一个十进制正整数转换为二进制数的时候,只需要通过除2取余的方法即可,但是怎么将一个十进制的负整数转换为二进制数呢?其实,负数是以补码的形式表示。其转换方式,简单原创 2022-02-28 10:55:50 · 2627 阅读 · 0 评论 -
IP 地址与整数之间的互相转换详解
IP 地址的“构造”是由 32 位二进制数组成的。IP地址转换为整数的代码:或者:优化如下:分析:IP 地址的每段可以看成是一个 0-255 的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。举例:一个IP地址为 10.0.27.105组合起来即为:00001010 00000000 00011011 01101001,转换为10进制数就是:167779177,即该IP地址转换后的数字就是它了。在上面的方法中,原理都是一样的。因为它就是操作的二进制数,使用原创 2022-02-28 10:29:16 · 1988 阅读 · 0 评论 -
json 和 xml 的区别
一、定义介绍XML 定义扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML 使用 DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。XML 是标准通用标记语言(SGML)的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构原创 2022-02-22 16:26:05 · 2097 阅读 · 0 评论 -
JDK1.8 的 8 个新特性
一、概述jdk1.8 的一些新特性简化了代码的写法,减少了部分开发量。主要如下:Lambda 表达式接口中的默认方法和静态方法函数式接口方法引用和构造器调用局部变量限制Stream API新时间日期API二、default 关键字在 Java 里面,通常接口里面只有抽象方法,不能有任何方法的实现。那么在 jdk1.8 里面打破了这个规定,引入了新的关键字 default,通过使用 default 修饰方法,可以在接口里面定义具体的方法实现,如下:public interface N原创 2022-02-22 16:14:53 · 7445 阅读 · 0 评论 -
理解阿里不建议返回值用枚举
一、阿里开发手册关于枚举使用的建议可以看出,阿里是支持定义和使用枚举的。但是为啥,返回值就要反对使用枚举?二、理解一由于升级原因,导致双方的枚举类不尽相同,在接口解析,类反序列化时出现异常。Java 中出现的任何元素,在 Gosling 的角度都会有背后的思考和逻辑(尽管并非绝对完美,但Java的顶层抽象已经是天才级了),比如:接口、抽象类、注解、和本文提到的枚举。枚举有好处,类型安全,清晰直接,还可以使用等号来判断,也可以用在 switch 中。它的劣势也是明显的,就是不能扩展。可是为什么在返原创 2022-02-21 17:09:04 · 311 阅读 · 0 评论 -
Java 打 jar 包的几种方式详解
一、制作只含有字节码文件的 jar 包只含有字节码文件,即只含有class文件的jar包制作,这是最简单的形式1、最简单的jar包——直接输出hello最终生成的jar包结构META-INFHello.class方法步骤:1️⃣用记事本写一个Hello.java的文件class Hello{ public static void main(String[] agrs){ System.out.println("hello"); }}2️⃣用命令行进入到该目录下,编译这原创 2022-02-21 17:05:55 · 14568 阅读 · 2 评论 -
Java 的 WAR 包、JAR 包、EAR 包
一、WAR 包 (Web Archive file)WAR 网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War 专用于 Web 方面。大部分的 JAVA WEB 工程,都是打成 WAR 包进行发布的。War 是一个 web 模块,其中需要包括 WEB-INF,是可以直接运行的 WEB 模块。通常用于网站,打成包部署到容器中,以 tomcat 来说,将 war 文件包放置它的 webapps 目录下,启动 Tomcat,,这个包可以自动进行解压,也就是你的 web 目录,原创 2022-02-21 17:04:27 · 679 阅读 · 0 评论 -
前台、后台【前端、后端】
一、前台呈现给用户的视觉和基本操作。二、后台:包括前端、后端用户浏览网页时,看不见后台的数据。1️⃣前端:HTML、JavaScript 等网页语言作业用在前端网页。2️⃣后端:对应JSP(jsp的运行原理——在tomcat服务器里运行)、JavaBean、dao 层、action 层和 service 层的业务逻辑代码(包括数据库)...原创 2022-02-21 16:57:47 · 677 阅读 · 0 评论 -
一个 Java 源文件中只能有一个 public 类
一、一个“.java”源文件中是否可以包括多个类(不是内部类)?有何限制?答:可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致。一个文件中可以只有非 public 类。如果只有一个类,并且是非 public 的,此类可以跟文件名不同。二、为什么一个 Java 源文件中只能有一个 public 类?Java 编程思想(第四版)一书中有这样 3 段话(6.4 类的访问权限):每个编译单元(文件)都只能有一个 public 类,这表示,每个编译单元都有单一的公原创 2022-02-18 14:15:01 · 8461 阅读 · 0 评论 -
关键字 static
一、全局变量、局部变量全局变量就好比一个容器或者一个公用的东西一样,就类似外面公共场所的凳子一样,大家都可以使用这个凳子。Java 中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。局部变量就是局部的东西,如果全局变量是桌子,局部变量就类似于抽屉,只能在一小部分地方使用,很局限。全局变量是外面公共场所的凳子,局部变量则就像某个酒店的凳子一样,在酒店内部,只有去住酒店才能使用。二、static 是什么Java 中并不存在全局变量的概念,但是可以通过 stati原创 2022-02-18 14:08:58 · 271 阅读 · 0 评论 -
Java 接口的实例化没有任何实际意义
Thread t = new Thread(new Runnable(){ @Override public void run(){ ... }})接口不能实例化,Runnable 是一个接口,此处不是用 new 来实例化了吗?这个其实就是一个假象的实例化而已,这种叫做匿名内部类,实质的代码等同于如下代码:class MyThread implements Runnable{ @Override public viod run(){原创 2022-02-18 13:56:43 · 737 阅读 · 0 评论 -
cookie、session 和 token
一、cookie 与 session 的区别cookie 数据存放在浏览器上,服务器能够知道其中的信息。session 数据会在一定时间内保存在服务器上,客户端不知道其中的信息,当访问增多,会比较消耗服务器的性能。cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗。session 相对安全,建议将登录信息等重要信息存放为 session。其他信息如果需要保留,可以放在cookie中。单个 cookie 保存的数据不能超过4K,很多浏览器都限制一个站点最多保存原创 2022-02-18 11:07:29 · 652 阅读 · 0 评论 -
Java 中的 PO、VO、DTO、BO、POJO、BO/DO、DAO
一、简单 Java 对象1️⃣PO persistent object持久对象。与数据库里表字段一一对应。PO是一些属性,以及set和get方法组成。一般情况下,一个表对应一个PO,直接与操作数据库的crud相关。2️⃣VO view object/value object表现层对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不。这根据业务的需要而定。对于页面上要展示的对象,可以封装一个VO对象,将所需数据封装进去。3️⃣DTO d.原创 2022-02-18 11:03:51 · 412 阅读 · 0 评论 -
(a== 1 && a ==2 && a==3) 可以为 true
这是一个JavaScript问题。一、valueOf 和 toString这个问题的一个关键点就是在于利用==双等号工作原理,==和===有什么区别呢?最主要的就是用==的时候会涉及到类型转换,如果双等号两边数据类型不同会尝试将它们转化为同一类型。基础数据类型之间的转换是比较简单的,这里来说一下对象类型在使用==时产生的隐形转换。valueOf 和 toString 这两个方法是每个对象都自带的(继承自 Object 原型),先定义一个简单的对象然后调用他的这两个方法来看下结果:toString原创 2022-02-18 11:01:49 · 416 阅读 · 0 评论 -
Java数据类型的转换:隐式(自动)转换与强制转换
一、数据类型的分类Java 中数据类型分为基本数据类型及引用数据类型。Java 数据类型的转换一般分三种,分别是:简单数据类型之间的转换;字符串与其它数据类型的转换;其它实用数据类型转换。二、简单数据类型之间的转换在 Java 中整型、实型(常量)、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)->int->long->float->double简单数据类型之间的转换又可以分为:低级到高级的自动类型转换高级到低级的强制类原创 2022-02-18 11:00:43 · 1849 阅读 · 0 评论 -
Java 中的判空操作
equals与==的区别一、String 的 isEmpty() 与 null 与 “” 区别public class demo { public static void main(String[] args) { String a = new String(); String b = ""; String c = null; test(a); test(b); test(c); }原创 2022-02-18 10:59:42 · 2046 阅读 · 0 评论 -
Java 数据类型及其判断
一、Java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型:byte、short、char、int、long、float、double、boolean它们之间的比较,应该用双等号(==)比较的是它们的值。2.引用数据类型:Java 当中所有的类都是继承于 Object 这个基类的,在 Object 中的基类中定义了一个 equals 的方法,这个方法的初始行为是比较变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指原创 2022-02-18 10:39:11 · 6974 阅读 · 0 评论 -
从 Java1 到 Java N
N八、Java SE 8Java 8是于2014年3月14号发布。从Java 8开始开发代号已经弃用了,所以从Java 8之后已经没有官方的开发代号了。Java SE 8中的新特性:①Lambda表达式②Pipelines和Streams③Date和Time API④Default方法⑤Type注解⑥Nashhorn JavaScript引擎⑦并发计数器⑧Parallel操作⑨移除PermGen Error⑩TLS SNI七、Java Version SE 7开发代号是Dolph原创 2022-02-18 10:21:06 · 364 阅读 · 0 评论 -
Java 中的双冒号“::”
一、双冒号“::”就是 Java 中的方法引用(Method references)方法引用的格式是类名::方法名。一般是用作 Lambda表达式。形如 ClassName::methodName 或者 objectName::methodName 的表达式,叫做方法引用(Method Reference)。看看编译器是如何根据 “晦涩难懂” 的 Method Reference 来推断开发者的意图的。例如:1.表达式:person -> person.getName();可以替换成:Pe原创 2022-02-17 14:01:39 · 32624 阅读 · 4 评论 -
理解 Lambda 表达式
Java8 Stream 相关集合转换一、初识 Lambda简化过程:常规实现接口。静态内部类。局部内部类。匿名内部类。lambda 表达式。lambda 表达式简化。public class TestMain { static class StaStudent implements Person { @Override public void speak(String language) { System.out.pr原创 2022-02-17 13:58:20 · 2329 阅读 · 0 评论 -
BigDecimal 加减乘除计算
一、简述在很多编程语言中,浮点数类型 float 和 double 运算会丢失精度。public static void main(String[] args) { System.out.println(0.05 + 0.01);//0.060000000000000005 System.out.println(1.0 - 0.42);//0.5800000000000001 System.out.println(4.015 * 100);//401.49999999999994原创 2022-02-17 13:44:18 · 1284 阅读 · 0 评论 -
short s=1;s=s+1;与short s=1;s+=1;的区别
Java 字符串拼接short s=1;s+=1;为什么能编译通过呢?这里涉及到类型转换。隐式类型转换可以从小到大自动转换,即 byte->short->int->long。如果反过来会丢失精度,必须进行显示类型转换。s+=1 的意思与 s = s+1 不同,s=s+1 这句先执行 s+1 然后把结果赋给 s,由于 1 为 int 类型,所以 s+1 的返回值是 int,编译器自动进行了隐式类型转换,所以将一个 int 类型赋给 short 就会出错。然而 1 也在 sho原创 2022-02-17 13:28:33 · 272 阅读 · 0 评论 -
e.printStackTrace() 锁死
一、过程短时间内大量请求访问同一接口代码本身有问题,很多情况下抛异常e.printStackTrace 来打印异常到控制台产生错误堆栈字符串到字符串池内存空间此内存空间一下子被占满了开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)相互等待,等内存,锁死了,整个应用挂掉了。二、总结代码质量,保持代码不抛异常。停止使用e.printStackTrace(),在项目发布后,除不断的刷控制台,并没什么用,可用log对原创 2022-02-17 10:45:59 · 284 阅读 · 0 评论 -
Java 字符串为何不可变
String 是 Java 中一个不可变的类,所以它一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。不可变类有很多优势。一、字符串池字符串池是 Java 运行环境方法区中的一部分特殊存储。当一个字符串被创建之时,首先会去这个字符串池中查找,如果找到直接返回对该字符串的引用。下面的代码只会在堆中创建一个字符串:String string1 = "abcd";String string2 = "abcd";如果字符串可变的话,当两个引用指向指向同一个字符串时,对其中一原创 2022-02-17 10:45:28 · 214 阅读 · 0 评论