Java
23个主题在此版块
-
- 1 篇回复
- 202 次查看
String 方法 方法名 参数 返回值 解释 contains() String boolean 判断字符串是否包含参数String endsWith() String boolean 判断字符串是否以参数String结尾 startsWith() String boolean 判断字符串是否以参数String开始 equals() String boolean 判断两个字符串的值是否相等 equalsIgnoreCase() String boolean 忽略大小写判断两个字符串的值是否相等 length() null int 返回字符串的长度 toLowerCase() null String …
侠客756的最后回复, -
首先理清几个基本概念: 程序:为完成特定任务,用某种语言编写的一组指令的集合。即一段静态的代码(还没运行起来) 进程:是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源。这是一个动态的过程:有自身的产生、存在和消亡的过程,这也是进程的生命周期。 线程:进程可进一步细化为线程,是一个程序内部的执行路径。 若一个进程同一时间并行执行多个线程,那么这个进程就是支持多线程的。 线程是cpu调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小。 多线程:是指程序当中包含多个执行单元,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个线程创建多个并行执行的线程来完成各自的任务。 Java线程的分类:用户线程和守护线程 java的gc()垃圾回收线程就是一个守护线程 守护线程是用来服务用户线程的,通过start()方法前调用thread.serDaemon(True)可以把一个用户线程变成守护线程 并行和并发: 并行:多个cpu同时执行多个任务 并发:一个cpu同时执行多个任务 多线程的优点 提高应用程序的相应。 提高计算机cpu的利用率 改成程序结构。将复杂的进程分成多个线程,独立运行。 线程的创建与启动 …
侠客756的最后回复, -
数在计算机中是以二进制形式表示的,分为有符号数和无符号数,原码、反码、补码都是有符号定点数的表示方法。一个有符号定点数的最高位为符号位,0是正,1是负(以8位整数为例),例如0000001 就是+1,1000001 就是-1,原码就是这个数本身的二进制形式,正数的反码和补码都是和原码相同,负数的反码是将其原码除符号位之外的各位求反 [-3]反=[10000011]反=11111100 。负数的补码是将其原码除符号位之外的各位求反之后在末位再加1,[-3]补=[10000011]补=11111101 。一个数和它的补码是可逆的。特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)[10000000]补=[10000000]反+1=11111111+1=(1)00000000=00000000(最高位溢出了,符号位变成了0) 为什么要设立补码呢? 通过补码运算,可以把减法运算变成加法运算;而乘法可以用加法来做,除法可以转变成减法。这样一来,加、减、乘、除四种运算“九九归一”了。这对简化CPU的设计非常有意义,CPU里面只要有一个加法器就可以做算术运算了。还有一个原因是为了统一正0和负0,正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示,但是他们的补码是一样的,都是00000000。 1. 原码 将一个整数转换成二进制形式,就是其原码。例如short a = 6; a 的原码就是0000 0000 0000 0110;更改 a 的值…
Pcasd的最后回复, -
- 0 篇回复
- 170 次查看
环境要求 已安装Java的JDK 已安装maven。并配置和建立Maven的本地仓库 已安装IDEA开发工具 本机环境如下: 系统 Windows 10专业版 x64 JDK 1.8.0_191 maven apache-maven-3.5.2 开发工具 Intellij IDEA 2018.2.4 专业版 安装步骤 打开IDEA,新建项目。 2.选择Spring Intializr (当然也可以选择默认Maven,然后添加依赖,这里就不详细介绍),点击【Next】。 3. 接下来,我们填写一些项目源数据的基本信息,完成后点击【Next】。 4. 根据需要选择项目需要配置的依赖项。完成后点击【Next】。 5. 选择项目名称,并点击完成。 可以看到已经生成了默认SpringBoot项目。
NedK7的最后回复, -
- 0 篇回复
- 119 次查看
当JVM内存不足时,会抛出java.lang.OutOfMemoryError. 主要的OOM类型右: Java heap space:堆空间不足 GC overhead limit exceeded : GC开销超出限制 Permgen space:永久代内存不足 Metaspace:元空间内存不足 Unable to create new native thread:无法创建新的本地线程 Out of swap space? : 交换空间内存不足 Kill process or sacrifice child Java heap space:堆空间不足 通用解决方案:通过-Xmx设置更大的堆内存【该方式可能只是延迟报错的发生,如果不能从根本上找到原因,报错还是可能会发生】 进一步原因分析及解决方案: 流量/数据量峰值 : 可以考虑添加机器资源,或者做限流 内存泄漏 : 需要找到持有的对象,修改代码 创建了一个超大对象(通常是一个大数组) : 可以进行业务切分 代码示例 内存泄漏【-Xmx10m】 package oom; import java.util.HashMap; import java.util.Map; /** * 内存泄露 */ public class JavaH…
NedK7的最后回复, -
- 0 篇回复
- 158 次查看
1. 先看下日志 org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 1 minute(s) at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:70) ~[spring-data-redis-2.5.11.jar!/:2.5.11] at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) ~[spring-data-redis-2.5.11.jar!/:2.5.11] at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44) ~[spring-data-redis-2.5…
NedK7的最后回复, -
Java特性和优势 简单性 面向对象 可移植性 高性能 Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。 Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。 分布式 动态性 多线程 Java是多线程语言,它提供支持多线程的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。 Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。 安全性 健壮性
NedK7的最后回复, -
- 0 篇回复
- 128 次查看
<!DOCTYPE html> <html> <head> <title>函数的运用</title> <meta charset="utf-8"> </head> <body> <script type="text/javascript"> /* //使用字符串的正则表达式方法 //var box = new RegExp('box','ig') var box = /box/ig; var ik = "this is a box !"; //alert (ik.match(box)); //上面有几个box就弹出几个 //alert (ik.match(box).length); //获取到了几个 //alert (ik.search(box)); //seatch 找到box中的box的b在第几个位置 //alert (ik.replace(box,'Tom')); //replace替换 瑞普利似 //alert (ik.split(box)); //split分开 以box将字符串以数组的型试分开 //正则表达式对象的静态属性 var box = new RegExp('(i)fhsik','ig'); //出现问题:忘记打了个new var ik = "har are you , my name is ifhsik !"; bo…
NedK7的最后回复, -
- 0 篇回复
- 123 次查看
1、数组 类型固定、长度固定 连续的内存空间 顺序存储、随机读取 查询快、新增删除慢。最好初始化的时候就指定数组大小。这样就可以避免一定的数组扩容出现的内存消耗。 import java.util.Arrays; import java.util.Iterator; /** * @author Administrator * @date 2022-09-11 16:56 * 实现一个数组 */ public class MyArray<E> implements Iterable<E> { private Object[] elementData; // Object存放数据 public MyArray(int capacity) // 构造方法 初始化容量大小 { // 指定长度 初始化数组 new 出一块空间 elementData = new Object[capacity]; } /** * 直接添加新元素 * @param element * @return */ public boolean add (E element) { int size = elementData.length; // 获取当前数组大小 int newCapacity = size+1; // 扩容+1 // 此处发生性能消耗,新增数据时,需要扩容,整体数据需要复制迁移,实际上arraylist是1.5…
NedK7的最后回复, -
- 0 篇回复
- 123 次查看
lombok 官網提供了許多注解,但是「勁酒雖好,可不能貪杯」,你用了越多 lombok 的進階用法,會讓整個團隊的學習曲線上升,反而會造成反效果,所以在此處只解釋最最常見、並且我認為最必要的注解使用方式,其他的用法就不介紹了 1. @Getter/@Setter 自動產生 getter/setter 2. @ToString 自動 override toString() 方法,會印出所有變量 3. @EqualsAndHashCode 自動生成 equals(Object other) 和 hashcode() 方法,包括所有非靜態變量和非 transient 的變量 如果某些變量不想要加進判斷,可以透過 exclude 排除,也可以使用 of 指定某些字段 Q : 為什麼只有一個整體的 @EqualsAndHashCode 注解,而不是分開的兩個 @Equals 和 @HashCode? A : 在 Java 中有規定,當兩個 object equals 時,他們的 hashcode 一定要相同,反之,當 hashcode 相同時,object 不一定 equals。所以 equals 和 hashcode 要一起 implement,免得發生違反 Java 規定的情形發生 4. @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsCon…
NedK7的最后回复, -
- 0 篇回复
- 133 次查看
背景: 海外 App 需要接入 FireBase SDK, 用来 监控崩溃率,需要上架 谷歌商店,所以只考虑了 谷歌自家的。 根据 FireBase 后台教程 大概就是三步走: 第 1 步:将 Firebase Crashlytics SDK 添加到您的应用 dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.3.1') // Declare the dependencies for the Crashlytics and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-analytics' } 第 2 步:将 Firebase Crashlytics 插件添加到您的应用 在项目级 build.gradle 文件中,将 Crashlytics Gradle 插件作为 buildscript 依赖项添加。 build…
NedK7的最后回复, -
- 0 篇回复
- 129 次查看
一、引入 1、泛型是什么 首先告诉大家ArrayList就是泛型。那ArrayList能完成哪些想不到的功能呢?先看看下面这段代码: ArrayList<String> strList = new ArrayList<String>(); ArrayList<Integer> intList = new ArrayList<Integer>(); ArrayList<Double> doubleList = new ArrayList<Double>(); 大家对ArrayList很熟悉,这里构造了三个List,分别盛装String、Integer和Double;这就是ArrayList的过人之处:即各种类型的变量都可以组装成对应的List,而不必针对每个类型分别实现一个构建ArrayList的类。这里可能看不懂,开篇总是困难的,下面看看如果没有泛型的话,我们要怎么做; 2、没有泛型会怎样 先看下面这段代码: 我们实现两个能够设置点坐标的类,分别设置Integer类型的点坐标和Float类型的点坐标: //设置Integer类型的点坐标 class IntegerPoint{ private Integer x ; // 表示X坐标 private Integer y ; // 表示Y坐标 public void se…
NedK7的最后回复, -
- 0 篇回复
- 134 次查看
1.运行实例EnumTest.java并分析 结论:枚举类型属于引用类型,不属于原始数据类型它的每一个具体值都引用一个特定的对象,可以使用“==”直接比较枚举变量的值,枚举是可以从字符串中转换的。 2.以下语句 int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y"); 输出结果为 结论·:在System.out.println()中,如果在string字符串后面是+和变量,会把变量转换成string类型,加号起连接作用,然后把两个字符串连接成一个新的字符串输出;如果先有变量的加减运算再有字符串,那么会从左到右先计算变量的加减,然后再与后面的string结合成一个新的字符串。也就是说加号只有在两个string类型或者其中一个是string类型的时候才起到连接作用,否则仍然是运算符。
NedK7的最后回复, -
- 0 篇回复
- 129 次查看
Windows configuration: 1.configure path environment variable use administrator role,open cmd 2.set path variable C:\Windows\system32>setx /m PATH "%PATH%;C:\code\mysql-connector-java-5.1.39-bin.jar" 3.check path variable C:\Windows\system32>echo %PATH% or C:\Windows\system32>path
NedK7的最后回复, -
- 0 篇回复
- 125 次查看
一、在Java中所有数据都是以补码的形式表示的,原码即数字的二进制表示加符号位,反码即将原码按位取反,补码简单来说即反码加1 二、Java中数据的表示方式 1.正数:正数的原码、补码、反码都相同,正数的符号位为0; 2.负数:负数的符号位为1,其余各位使用补码表示 3.使用补码表示的意义:首先,可以将减法运算转化为加法运算来处理,其次可以用统一的形式表示0,+0和-0的原码是不同的(符号位),而补码唯一。 三、Java中的实数 对于下面这段程序 它的运行结果是这样的 这种误差产生的原因是因为浮点数实际上是用二进制系统表示的。而分数1/10在二进制系统中没有精确的表示,其道理就如同在十进制系统中无法精确表示1/3一样。由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。在两个可以精确表示的相邻浮点数之间,必定存在无穷多实数是IEEE 754标准浮点数所无法精确表示的。用32位的单精度浮点数(float)为例,它的符号位占一位(bit),指数部分占8位,尾数部分占23位。现在我们需要存储十进制的0.1这个小数,首先需要把0.1转换成二进制数。然而,我们会发现,十进制的0.1转换成二进制是一个无限循环小数0.0001100110011001100…可是,尾数只有23位,只能截取二进制小数的前23位存储。这时,误差就产生了。当再次把这个浮点数转换成十…
NedK7的最后回复, -
- 0 篇回复
- 135 次查看
/* * 版权所有 2021 涂聚文有限公司 * 许可信息查看: * 描述: *简单工厂模式 simple factory * 历史版本: JDK 14.02 * 2021-12-12 创建者 geovindu * 2021-12-15 添加 Lambda * 2021-12-15 修改:date * 接口类 * 2021-12-15 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc Fruit.java * * */ package com.javapatterns.simplefactory; /* * */ public interface Fruit { /* *生长 * */ void grow(); /* * 收获 * */ void harvest(); /* *种植 * */ void plant(); } /* * 版权所有 2021 涂聚文有限公司 * 许可信息查看: * 描述: *简单工厂模式 simple factory * 历史版本: JDK 14.02 * 2021-12-12 创建者 geovindu * 2021-12-15 添加 Lambda * 2021-12-15 修改:date * 接口类 * 2021-12-15 修改者:Geov…
NedK7的最后回复, -
- 0 篇回复
- 121 次查看
servlet 是用于扩展服务器功能的 Java 编程语言类。尽管 servlet 可以响应任何类型的请求,但它们通常用于扩展 Web 服务器托管的应用程序,因此可以将它们视为在服务器上而不是在 Web 浏览器中运行的 Java 小程序。 Servlet 基本上是在服务器机器上运行的 Java 应用程序编程接口 (API),它拦截客户端发出的请求并生成/发送响应。一个著名的例子是 HttpServlet,它提供了使用流行的 HTTP 方法(例如 GET 和 POST)来挂钩 HTTP 请求的方法。简而言之,在 Web 服务器上运行的 Java 程序称为 Servlet。它们充当 Web 浏览器请求和服务器响应之间的链接。 servlet 的生命周期由三个主要方法组成。 1.init()方法 2. service() 方法 3.destroy()方法 init() 方法: 对 init 方法只有一次调用。它只在创建 servlet 时被调用一次,并且再也不会被调用。它用于一次性初始化。 服务()方法: 执行实际任务的主要方法是 service() 方法。为了处理来自浏览器的请求并返回响应,servlet 容器调用 service() 方法。 doGet(): T servlet 服务方法调用他的方法来处理来自客户端的 GET 请求。 做邮政(): 该方法由 servlet 服务方法调用以处理来自客户端的 POST 请求。 …
NedK7的最后回复, -
static表示静态,是Java中的一个修饰字符,可以修饰成员方法,成员变量 静态变量 需要用到静态的情况:共享的变量或方法 静态方法 类的种类
NedK7的最后回复, -
- 0 篇回复
- 125 次查看
package test4; import java.util.Scanner; import java.util.Random; public class Test4 { public static void dayin(int n6) {Random r = new Random(); int i3= r.nextInt(10); if(i3%4==0) { System.out.print("+"); } if(i3%4==1) { System.out.print("-"); } if(i3%4==2) { System.out.print("*"); } if(i3%4==3) { System.out.print("/"); } } public static void dayin2(int n6) {Random r = new Random(); int i3= r.nextInt(10); if(i3%2==0) { System.out.print("+"); } if(i3%2==1) { System.out.print("-"); } } public static void main(String[] args) {Random r = new Random(); Scanner sc=new Scanner(System.in); System.…
NedK7的最后回复, -
常用DOS命令 dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd\:退回到根目录 del:删除文件 exit:退出命令行 Java环境配置 Hello World class HelloWorld{ //类名 // main 程序入口 public static viod main(String[] args){ System.out.println("Hello World"); } } 使用javac命令将.java文件编译为.class字节码文件 之后使用java命令运行字节码文件 在一个Java源文件中可以声明多个class。但是,只能最多有一个类声明为public。而且要求声明为public的类的类名必须与源文件名相同 输出后换行;System.out.println(); 输出后不换行:System.out.print(); 编译过程:编译后生成一个或多个字节码文件,字节码文件名与类名相同 注释 单行注释 // 单行注释 多行注释 /* 多行 注释 */ 文档注释(Java特有) 注释内容可以被]DK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。 /** 文档注释 */ Java API文档 Java 8 中文版 - 在线API…
NedK7的最后回复,