java知识点整理(onenote)

1. Lambda表达式

【JAVA8】快速理解Consumer、Supplier、Predicate与Function_阳阳的博客-CSDN博客_supplier和function

2. Static和Final

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属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值。

3. Java中的集合

Java集合中List,Set以及Map等集合体系详解(史上最全)_君羊-CSDN博客_java集合

4. 函数式接口

java8 四大核心函数式接口Function、Consumer、Supplier、Predicate

原文:https://blog.csdn.net/a879611951/article/details/80104014

Function<T, R>

T:入参类型,R:出参类型

调用方法:R apply(T t);

定义函数示例:Function<Integer, Integer> func = p -> p * 10; // 输出入参的10倍

调用函数示例: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

5. 字符串

C语言与Java字符串的异同

C语言中字符数组需要结束符’\0’才会结束,而Java不需要

来自 https://blog.csdn.net/weixin_30539625/article/details/98595479

6. Stream数据流

7. Input和Output

Scancer:

next()方法输入字符串不能读取空格,可以使用nextLine()来读取一行。

总结:next碰到空格,换行都结束输入。而nextLine只以换行(回车)才会结束输入。

User Input Command Line Argument只能在运行程序的时候将输入传进程序,在程序运行的过程中就没办法使用 了。我们可以使用 Scanner 类来解决这个问题。Scanner的作用类似C语言的 scanf ,但是给我们提供 了更多的功能(method)。Scanner (Java Platform SE 8 ) (oracle.com)

Read Files :

第一种方法,使用 FileReader和 Scanner

优点: scanner能帮我们Parse data => nextInt()

第二种方法,使用 FileReader 和 BufferedReader

优点:buffer更大,效率更高 => 可以读取更大的文件,更快

Differences:

scanner的nextLine(): 如果没有内容了会报错,用hasNextLine()先检查 但是br的readLine()不会报错,如果没有内容会返回null。

读取csv文件:

1

2

Standard Output :

通常我们会将一些内容打印到terminal来进行debug或者打印出我们想要的结果

System.out.println() : 将一个String print在standard output并自动加上\n空行

System.out.printf() : 按照我们设定的format将string print出来,不会自动空行!

System.out.format() : 同上

8.Equals和==的区别

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博客

9. String的应用

Compare()方法

一.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<a2, 返回为0表示a1==a2;
数字类型不能用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函数可以格式化:

return String. %s\nAge: %d\nID: ,  name, age, id) ;

String  JavatF, String-Z—frimmutable class, ilUÆhlfiattribute/method  'iMflStringhkfiÉ  length() method  o "My people" . length() 9  conversion): touppercase() / t0Lowercase()  0 "00Sd" . toUpperCase() -> "00SD"  1 String a  a. toUpperCase(); // a8QMJ, i6Z"oosd" ,  2  bfffr(split): split() method  o "subject , code, lecturer". split(" ,  frstri ng  "OOSD" 1  2  String a =  " subject , code , lecturer" ;  Stri ng[] cells = a. spli •  " , {"subject" ,  " code", 't lecturer"}  o String array  contains() method  o "seashell" . true  tJJh(slicing): substri ng() method  o "old string" .substring(l, 3) -> "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

Note: 以上的所有String的操作都不会更改原来的String的值,而是得到一个新的String (String是 immutable的)

10. 数组

构成二维数组的一维数组不必有相同的长度,可以分别指定长度(必须指定分配元素个数):

inta[][]=newint[3][];
a[0]=newint[6];
a[1]=newint[12];
a[2]=newint[4];

image-20210203233725494

11. 类访问权限

![

](https://gitee.com/caolongxiu/cloudimage/raw/master/img/20210203233833.png)

12. 继承关系

当子类和父类在一个包的时候,子类自然继承其父类中不是private的成员变量和方法,但是不继承构造方法。

重写:

13. 生成随机数

(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();

14. format方法

String类的format()方法

格式化数字:

(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年%<tm月%<td日",nowTime);

输出str1:2016年10月01日

字符串格式中%tx转换符专门用来格式化日期和时 间的。%tx转换符中的x代表另外的处理日期和时间格式的转换符。

来自 https://blog.csdn.net/shayu8nian/article/details/49492783

15. 接口

抽象类可以有普通方法,但是接口只有抽象的方法,而且接口体中的所有常量(没有变量)的访问权限一定都是public,而且是static、final常量(允许省略public,final和static),所有抽象方法的权限一定都是public(允许省略public abstract).

default method in Interface  Default methods: Default behaviour of an method in a interface.  1 public interface wearable  3  default void wear() {  System.out.println("wearing something");  Questions:  1. Default method method 8Æabstract method  2. Default method class -k override ? subclassiil  ±override, PA $override

java的Comparable接口详解 - Mrfanl - 博客园 (cnblogs.com)

16. 类之间的关系

image-20210203234928301

17. Throwable类

java中的throwable异常和错误_何小杰的博客-CSDN博客_throwable

Error(错误):

是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

Exception(异常):

是程序本身可以处理的异常。

Java中异常又分两大类,运行时异常和编时译异常,除了运行时异常(RuntimeException)其余的都是编译时异常。

  • 1,unchecked exceptions(运行时异常)
    都是RuntimeException类及其子类异常,就是我们在开发中测试功能时程序终止,控制台出现的异常,比如:

    • NullPointerException(空指针异常)、
    • IndexOutOfBoundsException(下标越界异常)
    • ClassCastException(类转换异常)
    • ArrayStoreException(数据存储异常,操作数组时类型不一致)
    • IO操作的BufferOverflowException异常
  • 2, checked exceptions
    非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于 Exception类及其子类。
    此异常是可以被预知的,编译器会强制在编译时对异常进行捕获或声明。
    从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如

    • IOException、当发生某种 I/O 异常时,抛出此异常。
    • SQLException,此异常表示正在进行的查询违反了 SQL 语法规则。 异常时,抛出此异常。
    • EOFException,
    • FileNotFoundException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
      通俗的话说就是在写代码时出现红线,需要try catch或者throws时出现的异常!

18. 泛型

image-20210203235632138

19. 枚举

20. 可变变量

21. super关键字

子类一旦隐藏了继承的成员变量/方法,那么子类创建的对象就不再拥有该变量/方法,该变量归关键字super所有。

  • 当super调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量或继承的成员变量。

当用子类的构造方法创建一个子类的对象的时候,子类的构造方法总是先调用父类的某个构造方法。由于子类不继承父类的构造方法,如果没有明显调用则默认使用super(),所以当父类定义多个构造方法的时候,应当包括一个不带参数的构造方法。

猜你喜欢

转载自blog.csdn.net/weixin_47656543/article/details/113622339
今日推荐