== 值得是空间引用的地址相同 equials 比较的是内容的值
堆中存放的是对象或者数组或者方法,每次创建一个对象或者数组就会在堆开辟一块位置存放,而这个位置会有一个路径,这个指向的路径存在在栈中 栈中存放的是实例对象或者方法的引用名称
比如我创建一个String str = “abc”,首先回去寻找有没有指向abc的路径,如果没有,就在堆中创建一个内存存放abc ,而存放str的是栈
String是常量,创建后不能被更改不可以被继承,但是可以通过创建StringBuffer或者是StringBuilder对象 进行更改
StringBuffer是线程安全的 StringBuilder 线程不安全的操作效率高
父类静态变量 父类静态代码块 子类静态变量 子类静态块 父类成员变量 父类构造方法 子类成员变量 子类构造方法
public class Singleton {
private statisc Singleton singletion ;
pubiic Singleton (){
}
public Singleton getInstance(){
singleton =new Singleton ();
return singleton;
}
}
public class Singleton {
private statisc Singleton singletion = new Singleton();
pubiic Singleton (){
}
public Singleton getInstance(){
return singleton;
}
}
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
jvm自带了很多监控工具 都是位于JDK的bin目录 ,其中最常用的是jconsole 和 jvisualvm这两款视图监视工具
新生代垃圾回收器一般采用的是复制算法,复制算法的优点是效率高,缺点是内存利用率低;老年代回收器一般采用的是标记-整理的算法进行垃圾回收。
运行流程: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。
前置 | 语法 |
---|---|
无参无返回值 | ()->System.out.println(“test”) |
一个参数无返回值 | (x)->System.out.println(x) |
仅有一个参数无返回值 | x->System.out.println(x) |
多个参数有返回值有多条lambda表达式 | (x,y)->{System.out.print(x);return x,y} |
多个参数有返回值,只有一条lambda表达式 | (X,y)->xxx |
@Test
public void test(){
changeStr("hello",(str) -> System.out.println(str));
}
/**
* Consumer<T> 消费型接口
* @param str
* @param con
*/
public void changeStr(String str, Consumer<String> con){
con.accept(str);
}
@Test
public void test2(){
String value = getValue(() -> "hello");
System.out.println(value);
}
/**
* Supplier<T> 供给型接口
* @param sup
* @return
*/
public String getValue(Supplier<String> sup){
return sup.get();
}
@Test
public void test3(){
Long result = changeNum(100L, (x) -> x + 200L);
System.out.println(result);
}
/**
* Function<T,R> 函数式接口
* @param num
* @param fun
* @return
*/
public Long changeNum(Long num, Function<Long, Long> fun){
return fun.apply(num);
}
public void test4(){
boolean result = changeBoolean("hello", (str) -> str.length() > 5);
System.out.println(result);
}
/**
* Predicate<T> 断言型接口
* @param str
* @param pre
* @return
*/
public boolean changeBoolean(String str, Predicate<String> pre){
return pre.test(str);
}
总共有23种设计默认