Java相关介绍:
– Java 语言的三大特性:封装、继承和多态
隐藏内部状态并要求通过对象的方法执行所有交互被称为数据封装
类调用时需要实例化,开销比较大,比较消耗资源
–接口和类的区别
接口(interface)在java语言中就是一个抽象类型,但接口并不是一个抽象类,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。使用方法为:
implement 接口名
类是描述对象的属性和方法。可以被继承,继承方法为:
extends 父类名
– JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
抽象类
抽象类必须被继承,且继承后子类必须重写父类的所有抽象方法
抽象方法
如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。
枚举类
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割,结尾使用分号;结束
public enum NodeType {
SOURCE(1, "source"),
PROPAGATOR(2, "propagator"),
FILTER(3, "filter"),
SINK(4, "sink"),
;
}
values() 返回枚举类中所有的值。
静态方法和动态方法的区别
静态的方法在整个应用程序其间存储在内存中,速度快,但占用内存。
A.a();
动态的方法在先声明类实例才能调用类中的方法,调用完后,立即释放类,可以节省内存。
A b = new A();
b.a();
final关键字
把一整个类声明为final,被声明为final的类不能被继承
使用final关键字声明一个方法表示这个方法不能够被子类重写。
final修饰符表示:属性的值不能被改变
finally代码块
try 关键字最后可以定义 finally 代码块。 finally 块中定义的代码,总是在 try 和任何 catch 块之后、方法完成之前运行。 正常情况下,不管是否抛出或捕获异常 finally 块都会执行。
try {
System.out.println("尝试");
} catch (NumberFormatException e) {
System.out.println("捕捉");
} finally {
System.out.println("最终执行");
}
JVM指令
invokeinterface 用以调用接口方法,在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用。
invokestatic 用以调用类方法
1.要获取Java中的当前时间戳; 获取当前年月日时;
import java.sql.Timestamp;
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)+1);
calendar.set(Calendar.DATE,1);
calendar.set(Calendar.HOUR,1);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
Date time = calendar.getTime();
2.通过 System.getProperty(“user.dir”) 方式获取到项目根目录
String projectRootDirectoryPath = System.getProperty("user.dir");
3.通过标点符号切割字符串 / 去掉字符串前后空格 / 遍历字符串 / 判断单个字符相等
String[] str_list = str.split(",");
str.replace(" ","");
for(int i=0; i<s.length(); i++){
System.out.print(s.charAt(i));
}
if(s.chrAt(i)==';'){
}
4.java.util.concurrent.Callable
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
运行Callable任务可拿到一个Future对象,可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
java初始化列表,map
public List<Integer> hashPool = new ArrayList<>();
public Map<Integer, MethodEvent> track_map = new HashMap<Integer, MethodEvent>();
6.提取字符串中的所有数字
String str = "ddd123456";
//用正则表达式
String reg = "[^0-9]";
//Pattern类的作用在于编译正则表达式后创建一个匹配模式.
Pattern p = Pattern.compile(reg);
//Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配
Matcher m = p.matcher(str);
System.out.println(m.replaceAll("").trim());
7.json.loads(json_data) 报错json.decoder.JSONDecodeError: Invalid control character at: line 25 column 18 (char 18) 原因:json默认使用的是严谨格式,json_data键值中有非法控制符号如\n\t, 当跨语言传递数据时,就容易报出这个错误。(python)
解决方法:加上参数 strict
json.loads(json_data, strict=False)
8. Java对⽇期Date类进⾏加减运算⼀⼆三
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(item.getTime());
rightNow.add(Calendar.DAY_OF_YEAR,3);//⽇期加3天
Date dt = rightNow.getTime();
9. 对象运算符(instanceof)
用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假(false)。
10.@SuppressWarnings注解
可以消除这些警告的产生
unchecked to suppress warnings relative to unchecked operations ( 抑制没有进行类型检查操作的警告)
unused to suppress warnings relative to unused code ( 抑制没被使用过的代码的警告)
all to suppress all warnings (抑制所有警告)
11.字符串转数字类型
转化为整型数字 Integer.parseInt(String s) ;
转化为浮点型数字 Float.parseFloat(String s)。
12. 数据结构判空
(map、list、set)
CollectionUtils.isEmpty() 为空
CollectionUtils.isNotEmpty() 不为空
13. 字符串截取 substring 字符串查找 indexOf
substring 该子字符串始于指定索引处的字符,一直到此字符串索引末尾。
indexOf 它可以在给定字符串中查找字符,并返回字符所对应的下标,如果找不到,则返回-1
14. 打jar包方式
15. intellij idea 左上角"File"菜单 Project Structure
16. Artifacts 绿色"+" "JAR" Empty
17. Name栏填入自定义名字
Output ditectory 选择jar包目标目录
Available Elements 双击需要添加jar包的文件 即可添加到左边的jar包目录下
18. 点击Create Manifeat 选择放置MANIFEAT.MF的文件路径
$ javac Hello.java # 编译成.class 文件
$ jar -cvf hello.jar Hello.class # 打包
已添加清单
正在添加: Hello.class(输入 = 401) (输出 = 275)(压缩了 31%)
$ jar -xvf hello.jar # 解压
已创建: META-INF/
已解压: META-INF/MANIFEST.MF
已解压: Hello.class
13.JAVA读写文件
读文件:
InputStream fileInputStream = new FileInputStream(filePath);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuffer sb = new StringBuffer();
String text = null;
while((text = bufferedReader.readLine()) != null){
sb.append(text);
}
System.out.println(sb.toString());
写文件:
FileOutputStream fileOutputStream = null;
File file = new File(filePath);
fileOutputStream = new FileOutputStream(file, true);
fileOutputStream.write(content.getBytes());
fileOutputStream.flush();
fileOutputStream.close();
14.ThreadLocal
ThreadLocal是Thread的局部变量,用于编多线程程序。
它主要由四个方法组成initialValue(),get(),set(T),remove()
//1、获取当前线程
Thread t = Thread.currentThread();
//2、获取当前线程的ThreadLocalMap
ThreadLocalMap map = getMap(t);
StackTrace用栈的形式保存了方法的调用信息
可用Thread.currentThread().getStackTrace()方法得到当前线程的StackTrace信息.
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
该方法返回的是一个StackTraceElement数组
遍历该StackTraceElement数组.就可以看到方法间的调用流程
15. AtomicInteger
类是系统底层保护的int类型,通过提供执行方法的控制进行值的原子操作。
getAndIncrement() - 以原子方式递增当前值并返回旧值。它相当于++ i操作。
什么情况下使用AtomicInteger?
1. 作为多个线程同时使用的原子计数器。
2. 在比较和交换操作中实现非阻塞算法。
16.提取富文本文字部分
String regx = "(<.+?>)|(</.+?>)";
Matcher matcher = Pattern.compile(regx).matcher(richText);
while (matcher.find()) {
// 替换图片
richText = matcher.replaceAll("").replace(" ", "");
}
17.SQL相关
①sql获取百分比函数,对结果保留两位小数
CONCAT( ROUND( vcr.number_vote / ct.number_vote * 100, 2 ), '', '%' )
②分组统计满足情况
select group_name as groupName,
COUNT(*) AS total,
sum(case when compliance='满足' then 1 else 0 end) as allComplete,
concat(sum(case when compliance='全部满足' then 1 else 0 end)*100/COUNT(*),'','%') as allCompleteRate,
sum(case when compliance='不满足' then 1 else 0 end) as noComplete,
concat(sum(case when compliance='不满足' then 1 else 0 end)*100/COUNT(*),'','%') as noCompleteRate
from xxx.xx
group by group_name
语法“CASE 字段 WHEN 条件1 THEN 操作1 WHEN 条件2 THEN 操作2...ELSE 操作n END;”
③mybatis配置动态sql
不支持单引号,改为双引号
/' /' --> /" /"
④按某字段xxx分组 只取每个分组最新时间的一个条目
with t as (select *, row_number() over (partition by xxx order by create_time desc) as rn
from table) select * from t where rn=1
⑤ 按照多字段排序
如果不显示指出是升序还是降序,则默认为是升序
ORDER BY column1,column2;
6 多表连接
Left join:左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。
Right join:右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。
Inner join:内连接,同时将两表作为参考对象,根据ON后给出的两表的条件将两表连接起来。结果则是两表同时满足ON后的条件的部分才会列出。
平移代码 – 选中代码 按tab键向右平移。 按tab + shift向左平移
IDEA问题汇总
报错:
Error running 'Application': Command line is too long. Shorten command line for Application or also for Spring Boot default configuration?
解决:
- 点击项目启动配置项
- shorten command line 选项选择 JAR manifest 或者 classpath file 选项
- 重新启动工程运行即可
spring boot报错
解决 Could not resolve placeholder ‘xxx‘ in string value “${xxx}“
配置 yml文件 — 缺少对应值