【JAVA8】快速理解Consumer、Supplier、Predicate与Function_阳阳的博客-CSDN博客_supplier和function
java中static和final修饰符 - 韦邦杠 - 博客园 (cnblogs.com)
1、static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问,当然也可以通过对象来访问(但是这是不推荐的)。
2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract
3、final修饰类中的属性
无论属性是基本类型还是对象类,final所起的作用都是变量里面存放的“值”不能变。这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。 而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。
final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值。
Java集合中List,Set以及Map等集合体系详解(史上最全)_君羊-CSDN博客_java集合
java8 四大核心函数式接口Function、Consumer、Supplier、Predicate
原文:https://blog.csdn.net/a879611951/article/details/80104014
Function
T:入参类型,R:出参类型
调用方法:R apply(T t);
定义函数示例:Function
调用函数示例:func.apply(10); // 结果100
Consumer
T:入参类型;没有出参
调用方法:void accept(T t);
定义函数示例:Consumer consumer= p -> System.out.println§; // 因为没有出参,常用于打印、发送短信等消费动作
调用函数示例:consumer.accept(“18800008888”);
Supplier
T:出参类型;没有入参
调用方法:T get();
定义函数示例:Supplier supplier= () -> 100; // 常用于业务“有条件运行”时,符合条件再调用获取结果的应用场景;运行结果须提前定义,但不运行。
调用函数示例:supplier.get();
Predicate
T:入参类型;出参类型是Boolean
调用方法:boolean test(T t);
定义函数示例:Predicate predicate = p -> p % 2 == 0; // 判断是否、是不是偶数
调用函数示例:predicate.test(100); // 运行结果true
来自 https://blog.csdn.net/u012448083/article/details/84937491?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.not_use_machine_learn_pai
C语言与Java字符串的异同
C语言中字符数组需要结束符’\0’才会结束,而Java不需要
来自 https://blog.csdn.net/weixin_30539625/article/details/98595479
next()方法输入字符串不能读取空格,可以使用nextLine()来读取一行。
总结:next碰到空格,换行都结束输入。而nextLine只以换行(回车)才会结束输入。
User Input Command Line Argument只能在运行程序的时候将输入传进程序,在程序运行的过程中就没办法使用 了。我们可以使用 Scanner 类来解决这个问题。Scanner的作用类似C语言的 scanf ,但是给我们提供 了更多的功能(method)。Scanner (Java Platform SE 8 ) (oracle.com)
第一种方法,使用 FileReader和 Scanner
优点: scanner能帮我们Parse data => nextInt()
第二种方法,使用 FileReader 和 BufferedReader
优点:buffer更大,效率更高 => 可以读取更大的文件,更快
Differences:
scanner的nextLine(): 如果没有内容了会报错,用hasNextLine()先检查 但是br的readLine()不会报错,如果没有内容会返回null。
通常我们会将一些内容打印到terminal来进行debug或者打印出我们想要的结果
System.out.println() : 将一个String print在standard output并自动加上\n空行
System.out.printf() : 按照我们设定的format将string print出来,不会自动空行!
System.out.format() : 同上
java中的==和equal()比较_baidu_38634017的博客-CSDN博客
在Java中游8种基本数据类型:
浮点型:float(4 byte), double(8 byte)
整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
字符型: char(2 byte)
布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值"true"和"false")
对于这8种基本数据类型的变量,变量直接存储的是“值”,因此在用关系操作符==来进行比较时,比较的就是 “值” 本身。要注意浮点型和整型都是有符号类型的,而char是无符号类型的(char类型取值范围为0~2^16-1).
也就是说比如:
int n=3;
int m=3;
变量n和变量m都是直接存储的"3"这个数值,所以用==比较的时候结果是true。
而对于非基本数据类型的变量,在一些书籍中称作为 引用类型的变量。比如上面的str1就是引用类型的变量,引用类型的变量存储的并不是 “值”本身,而是于其关联的对象在内存中的地址。比如下面这行代码:
String str1;
这句话声明了一个引用类型的变量,此时它并没有和任何对象关联。
而 通过new String(“hello”)来产生一个对象(也称作为类String的一个实例),并将这个对象和str1进行绑定:
str1= new String("hello");
那么str1指向了一个对象(很多地方也把str1称作为对象的引用),此时变量str1中存储的是它指向的对象在内存中的存储地址,并不是“值”本身,也就是说并不是直接存储的字符串"hello"。这里面的引用和C/C++中的指针很类似。
因此在用==对str1和str2进行第一次比较时,得到的结果是false。因此它们分别指向的是不同的对象,也就是说它们实际存储的内存地址不同。
其他的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。
总结来说:
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
##
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
来自 https://blog.csdn.net/baidu_38634017/article/details/85395614
第一次面试(java 中equal和==的详解)_flysening的博客-CSDN博客
一.java中的compareto方法
1.返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值
String a1 = "a";
String a2 = "c";
System.out.println(a1.compareTo(a2));//结果为-2
2.即参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值,
String a1 = "aa";
String a2 = "ad";
System.out.println(a1.compareTo(a2));//结果为-3
3.如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值
String a1 = "aa";
String a2 = "aa12345678";
System.out.println(a1.compareTo(a2));//结果为-8
4.返回为正数表示a1>a2, 返回为负数表示a1
数字类型不能用compareTo,nt跟int的比较不能用compareTo方法,直接用大于(>) 小于(<) 或者 等于(==) 不等于(!=)来比较即可
int num1 = 4;
int num2 = 5;
num1.compareTo(num2);//Cannot invoke compareTo(int) on the primitive type int
你可以先把你的int型变量转换成String再进行比较
int num1 = 4;
int num2 = 5;
//parse int to String
System.out.println((num1+"").compareTo(num2+""));//-1
System.out.println(new Integer(num1).toString(). compareTo(new Integer(num2).toString()));//-1
System.out.println(String.valueOf(num1).compareTo(String.valueOf(num2)));//-1
利用format函数可以格式化:
"00SD" 1 String a a. toUpperCase(); // a8QMJ, i6Z"oosd" , 2 bfffr(split): split() method o "subject , code, lecturer". split(" , frstri ng "OOSD" " width="650" height="39">
"ld start is inclusive end is exclusive o iLIél—frVrfijstring MAstringrfrficharacter: repl ace() method o "ptsd" .replace('p', 'o'). replace('t', 'o') • indexing: charAt() method o "SWEN" .charAt(O) -> 'S' o Note: char! 6Æstring " width="650" height="39">
Note: 以上的所有String的操作都不会更改原来的String的值,而是得到一个新的String (String是 immutable的)
构成二维数组的一维数组不必有相同的长度,可以分别指定长度(必须指定分配元素个数):
inta[][]=newint[3][];
a[0]=newint[6];
a[1]=newint[12];
a[2]=newint[4];

当子类和父类在一个包的时候,子类自然继承其父类中不是private的成员变量和方法,但是不继承构造方法。
重写:
(1)调用Math类的static方法random()返回随机数:[0.0,1.0)
例子:下列代码得到1~100之间的随机整数(包括1和100):
(int)(Math.random()*100)+1
(2)使用java.util中的Random类
构造方法:public Random();
public Random(long seed);(使用当前机器时间作为种子创建Random对象)
例子:
Random random=new Random();
random.nextInt();(返回一个随机整数)
random.nextInt(m);(返回值[0,m))
random.nextDouble;(返回值[0.0,1.0))
random.nextBoolean();
(1)%d:十进制整数
%o:八进制整数
%x:十六进制整数
%X:十六进制整数(大写)
String s=String.format("%d,%o,%x,%X",703576,703576,703576,703576);
输出s:703576,2536130,abc58,ABC58
(2) %+d强制加上+号
%,d:格式化整数按千位分组,逗号隔开
(3)控制长度
%md:在左边增加空格补成m位
%0md:在左边增加0补成m位
(4)%f:格式化成十进制浮点数,小数保留六位
%e(%E):格式化为科学计数法的十进制的浮点数(%E将指数部分大写)
例子:String s=String.format("%f,%e",13579.98,13579.98);
输出s:13579.980000,1.357998e+04
(5)%.nf:小数点保留n位
format(格式化模式,日期列表)
format(Locale locale,格式化模式,日期列表)
例子:Locale.US
Date nowTime=new Date();
希望格式化同一个日期 可使用“<”符号
例子:
String str1=String.format("%tY年% 输出str1:2016年10月01日 字符串格式中%tx转换符专门用来格式化日期和时 间的。%tx转换符中的x代表另外的处理日期和时间格式的转换符。 来自 https://blog.csdn.net/shayu8nian/article/details/49492783 抽象类可以有普通方法,但是接口只有抽象的方法,而且接口体中的所有常量(没有变量)的访问权限一定都是public,而且是static、final常量(允许省略public,final和static),所有抽象方法的权限一定都是public(允许省略public abstract). java的Comparable接口详解 - Mrfanl - 博客园 (cnblogs.com) java中的throwable异常和错误_何小杰的博客-CSDN博客_throwable 是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。 是程序本身可以处理的异常。 Java中异常又分两大类,运行时异常和编时译异常,除了运行时异常(RuntimeException)其余的都是编译时异常。 1,unchecked exceptions(运行时异常) 2, checked exceptions 子类一旦隐藏了继承的成员变量/方法,那么子类创建的对象就不再拥有该变量/方法,该变量归关键字super所有。 当用子类的构造方法创建一个子类的对象的时候,子类的构造方法总是先调用父类的某个构造方法。由于子类不继承父类的构造方法,如果没有明显调用则默认使用super(),所以当父类定义多个构造方法的时候,应当包括一个不带参数的构造方法。15. 接口
16. 类之间的关系
17. Throwable类
Error(错误):
Exception(异常):
都是RuntimeException类及其子类异常,就是我们在开发中测试功能时程序终止,控制台出现的异常,比如:
非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于 Exception类及其子类。
此异常是可以被预知的,编译器会强制在编译时对异常进行捕获或声明。
从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如
通俗的话说就是在写代码时出现红线,需要try catch或者throws时出现的异常!18. 泛型
19. 枚举
20. 可变变量
21. super关键字