java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass
一旦初始化,值无法修改
主要是用于多线程之间的数据共享,避免数据污染
class不设置setter即可实现Immutable Class
public class ImmutableIntArray {
private final int[] array;
public ImmutableIntArray(int[] array) {
this.array = array.clone();
}
public int[] getValue() {
return this.clone();
}
}
null检查
对象null检查
Object obj = null;
Objects.isNull(obj); // true
Objects.nonNull(obj); // false
集合null检查
List<Object> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(null);
list.add(3);
list.stream().filter(Objects::nonNull).forEach(item -> {
System.out.println(item);
}); // 过滤null值
字符编码
BufferedWriter wr = Files.newBufferedWriter(Paths.get("demo.txt"),StandardCharsets.UTF_8)
BufferedReader reader = Files.newBufferedReader(Paths.get("demo.txt"),StandardCharsets.UTF_8)
String s = new String(Files.readAllBytes(Paths.get("demo.txt")), StandardCharsets.UTF_8);
byte[] bytes = "aaaa".getBytes(StandardCharsets.UTF_8);
default logger
private static final Logger logger = Logger.getLogger(TestController.class.getName());
logger.log(Level.INFO, String.format("%s: %s", "输出", "日志"));
logger.warning(String.format("%s: %s", "输出", "日志"));
日志等级
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
函数可变参数
void fn(int... x) {
for (int item : x) {
System.out.println(item);
}
}
fn(1,2,3,4,5);
Nashorn JavaScript engine
执行脚本文件
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval(new FileReader("C:\\Users\\26401\\Desktop\\" + "demo.js"));
改变js文件输出流
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
StringWriter stringWriter = new StringWriter();
engine.getContext().setWriter(stringWriter);
engine.eval(new FileReader("C:\\Users\\26401\\Desktop\\" + "demo.js"));
return stringWriter.toString();
全局变量
engine.put("global", "globaldata");
engine.eval("print(global);");
engine.get("global");
2D图
package com.springlearn.learn.model;
import javax.swing.*;
import java.awt.*;
// MyPanel extends JPanel, which will eventually be placed in a JFrame
public class MyPanel extends JPanel {
// custom painting is performed by the paintComponent method
@Override
public void paintComponent(Graphics g){
// clear the previous painting
super.paintComponent(g);
// cast Graphics to Graphics2D
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red); // sets Graphics2D color
// draw the rectangle
g2.drawRect(0,0,100,100); // drawRect(x-position, y-position, width, height)
g2.setColor(Color.blue);
g2.fillRect(200,0,100,100); // fill new rectangle with color blue
}
}
public class Test{
JFrame f;
MyPanel p;
public Test(){
f = new JFrame();
// get the content area of Panel.
Container c = f.getContentPane();
// set the LayoutManager
c.setLayout(new BorderLayout());
p = new MyPanel();
// add MyPanel object into container
c.add(p);
// set the size of the JFrame
f.setSize(400,400);
// make the JFrame visible
f.setVisible(true);
// sets close behavior; EXIT_ON_CLOSE invokes System.exit(0) on closing the JFrame
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws Exception {
DemoApplication t = new DemoApplication();
}
}
类单例
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
public class Singleton {
private static class InstanceHolder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return InstanceHolder.INSTANCE;
}
private Singleton() {}
}
克隆
public class Test implements Cloneable {
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Test test = new Test();
Test testcopy = (Test) test.clone();
修饰符
常用修饰符
public 公开
protected 父类和子类可用
default 不写权限关键字,默认是default,只能在当前package下是使用
private 本类可用
final 表示固定不变的
final修饰的类不能被继承
final修饰的方法不能被子类重写
final修饰的变量就是常量,不能修改 final int j = 11;
static 表示静态,只能通过类本身访问
其他修饰符
strictfp 浮点计算
strictfp class A{}
volatile 多线程中,读取最新值
volatile boolean active;
synchronized 只允许一个线程操作
synchronized void SharedMethod(){}
void SharedMethod(){
synchronized (this){
...
}
}
transient 不会被序列化
public transient int limit = 55;
结语
本文章是java成神的系列文章之一
如果你想知道,但是本文没有的,请下方留言
我会第一时间总结出来并发布填充到本文
java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作的更多相关文章
- Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug
集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. ...
- java成神之——文件IO
文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...
- java成神之——Stream和Optional
Stream流 基本使用 流关闭 平行流 流重用 iterator转换成流 分组计数 无限流 流转集合 压缩流 统计数值流 集合转换流遍历 流拼接 reduce 使用流生成随机字符串 流的包装流 几种 ...
- java成神之——注释修饰符
注释修饰符 自定义注释 元注释 通过反射在runtime访问注释 内置注释 多注释实例 错误写法 使用容器改写 使用@Repeatable元注释 注释继承 使用反射获取注释 获取类的注释 获取方法的注 ...
- java成神之——网络编程基本操作
网络编程 获取ip UDP程序示例 TCP程序 结语 网络编程 获取ip InetAddress id = InetAddress.getLocalHost(); // InetAddress id ...
- java成神之——MySQL Connector/J 的基本使用
使用示例 DBCP连接池 结语 使用示例 public class demo { static Connection con = null; static Statement st = null; s ...
- java成神之——HttpURLConnection访问api
HttpURLConnection 访问get资源 访问post资源 访问Delete资源 获取状态码 结语 HttpURLConnection 访问get资源 HttpURLConnection c ...
- java成神之——正则表达式基本使用
正则表达式 常用匹配规则 基本使用 标记符的使用 部分正则标记 正则表达式在字符串方法中的使用 结语 正则表达式 常用匹配规则 [abc] abc其中一个 [^abc] abc之外的一个 [a-z] ...
- java成神之——集合框架之Maps,Hashtable
集合 Maps HashMap 创建和初始化map 遍历方式 LinkedHashMap WeakHashMap TreeMap 线程锁 Hashtable 结语 集合 Maps HashMap Ma ...
随机推荐
- ubuntu14.04搭建Hadoop2.9.0伪分布式环境
本文主要参考 给力星的博文——Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04 一些准备工作的基本步骤和步骤具体说明本文不再列出,文章中提到的“见参考”均指以上 ...
- 【spark】常用转换操作:reduceByKey和groupByKey
1.reduceByKey(func) 功能: 使用 func 函数合并具有相同键的值. 示例: val list = List("hadoop","spark" ...
- 八大排序算法的java实现
有时间再贴算法分析图 JDK7的Collections.sort()的算法是TimSort, 适应性的归并排序, 比较晦涩难懂, 这里没有实现 public class mySort { // 冒泡排 ...
- LeetCode OJ:Two Sum(两数之和)
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- PostgreSQL java读取bytes字段
写入bytea: File img = new File("/tmp/eclipse.png"); fin = new FileInputStream(img); con = Dr ...
- 字段值为NULL时的like注意事项
null like '%%'是有问题的 mysql中应该这样写COALESCE($ZU.mobile,'') like '%%' 或者 where IsNull([table].[column],'' ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 解决跨域POST登录中IE不能正常工作的bug
结合我的这篇blog <简单实用的跨域表单POST提交> 文章,这篇blog中的思路是解决在www.a.com站中登录 同时要把关联站www.b.com登录状态也设置成登录状态,在a中获取 ...
- win10开始键点击无效果
1.在键盘上按下win+R键,或在开始菜单图标上点击右键选择运行: 2.输入powershell,按下“确定”运行:3.在窗口里输入或复制粘贴以下命令,注意只有一行: Get-AppxPackage ...
- Yii登录验证和全局访问用户ID
注意:Yii默认的代码,Yii::app()->user->id返回的不是我们想要的用户ID,而是用户名.因此在useridentity类中要用一个变量来存储登录用户的ID,然后重载get ...