3 Java 源文件的命名规则
通常情况下,Java 程序源文件的文件名可以任意。
但如果其中定义了一个 public 类,则该源文件的文件名必须与该 public 类的类名相同。
一个Java 源文件可包含多个类定义,但最多只能包含一个public类定义。
5 package https://blog.csdn.net/qq_41297896/article/details/90056534
https://www.runoob.com/java/java-package.html
https://www.runoob.com/w3cnote/java-compile-with-package.html
为了更好地组织类,用于区别类名的命名空间
包的命名规范
https://blog.csdn.net/shi779276212/article/details/92795085
使用:
6 重写(Override)与重载(Overload) https://www.runoob.com/java/java-override-overload.html
重写:是子类对父类同名函数的二次实现
重载:一个类内存在多个重名函数,而参数不同
7 多态 http://c.biancheng.net/view/1001.html#
https://www.runoob.com/java/java-polymorphism.html
多态是同一个行为具有多个不同表现形式或形态的能力。
多态存在的三个必要条件
继承
重写
父类引用指向子类对象:Parent p = new Child();
分类:
https://blog.csdn.net/zhao_miao/article/details/83750898
1 向上转型
父类 父类对象 = 子类实例
只能调用父特有,子覆盖,不能子特有
2 向下转型
向下转型之前一定要进行向上转型!!
子类 子类对象 = (子类)父类实例
可以父特有,子覆盖,子特有
8 程序入口 https://blog.csdn.net/weixin_29740921/article/details/114249667
入口为main,就和c++的main函数一样,main方法的写法是固定的
1 2 public static void main(String[] args) {} public static void main(String args[]) {}
一个java文件可以不只有一个main,不同类都可以有自己的main,然后选哪个main呢,也就是选哪个类呢?
选公共类(至多包含一个);若是没有就选用同名类,和文件同名
9 引用 https://zhulinyin.github.io/2019/01/28/Java%E7%9A%84%E5%9B%9B%E7%A7%8D%E5%BC%95%E7%94%A8%E6%96%B9%E5%BC%8F/
12 数据类型 分类
https://blog.csdn.net/Coding_Zhu/article/details/53096178
本质
https://www.zhihu.com/question/31203609
13 数组 声明
1 2 3 4 5 dataType[] arrayRefVar; // 首选的方法 或 dataType arrayRefVar[]; // 效果相同,但不是首选方法
创建
1 2 3 arrayRefVar=new dataType[arraySize]; 或者 arrayRefVar = {value0, value1, ..., valuek};
多维数组
1 type[][] typeName = new type[typeLength1][typeLength2];
14 foreach 和普通for循环比较,在遍历数组、集合方面,foreach为开发人员提供了极大的方便
1 2 3 4 5 6 for(元素类型t 元素变量x : 遍历对象obj){ 引用了x的java语句; }
1 2 3 4 5 6 7 8 9 10 public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; // 打印所有数组元素 for (double element: myList) { System.out.println(element); } } }
15 从控制台读取数据 1 BufferedReader
1 2 3 4 1 throws IOException 2 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 3 c = (char) br.read(); 或者str = br.readLine();
2 Scanner
16 类型转化 http://c.biancheng.net/view/796.html
1自动类型转换
两种数据类型彼此兼容
目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)
2 强制类型转换
所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。
1 2 3 int a = 3; double b = 5.0; a = (int)b;
17 异常处理 http://c.biancheng.net/view/6751.html
Exception 是异常的基类
1 语句抛出异常
try
1 2 3 4 5 6 7 8 9 try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }finally{ // 程序代码 }
throw
当 throw 语句执行时,它后面的语句将不执行,此时程序转向调用者程序,寻找与之相匹配的 catch 语句,执行相应的异常处理程序。如果没有找到相匹配的 catch 语句,则再转向上一层的调用程序。这样逐层向上,直到最外层的异常处理程序终止程序并打印出调用栈情况。
2 方法抛出异常
throws
函数声明异常,但是本身不处理异常,交给调用者处理
1 returnType method_name(paramList) throws Exception 1,Exception2,…{…}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import java.io.FileInputStream; import java.io.IOException; public class Test04 { public void readFile() throws IOException { // 定义方法时声明异常 FileInputStream file = new FileInputStream("read.txt"); // 创建 FileInputStream 实例对象 int f; while ((f = file.read()) != -1) { System.out.println((char) f); f = file.read(); } file.close(); } public static void main(String[] args) { Throws t = new Test04(); try { t.readFile(); // 调用 readFHe()方法 } catch (IOException e) { // 捕获异常 System.out.println(e); } } }
1 2 public static void main(String[] args) throws Exception 异常谁处理,JVM处理
20 final https://zhuanlan.zhihu.com/p/60889552
21 static https://zhuanlan.zhihu.com/p/70110497
22 泛型 目的:为了兼容多种数据类型,和c++模板很像
泛型标记符 1 2 3 4 5 6 7 8 E - Element (在集合中使用,因为集合中存放的是元素); T - Type(Java 类); K - Key(键); V - Value(值); N - Number(数值类型); R - Result (返回结果,多用于函数式编程); ? - 表示不确定的java类型。 O
1 泛型函数 1 2 public void printArray( int [] inputArray ) -》public < E > void printArray( E[] inputArray ) public <T extends Comparable<T>> T maximum(T x, T y, T z) //Comparable是一个类
2 泛型类 1 public class Box -》 public class Box<T>
24 正则 java和python正则很像,但不是完全一样
https://blog.csdn.net/weixin_39574708/article/details/114958384
https://blog.csdn.net/henu_xiaohei/article/details/84765678
1 |
或者
2 固定匹配位数
1 2 \d{7,8} //7为或者8为 [A-Z]{1}[0-9]{8}
注意matches(),find()
match是全部匹配,find是部分匹配
3 转义字符
转义字符\ *:不同于原来的字母含义,比如\n表示换行
java正则为什么要两个斜杆表示转义
https://blog.csdn.net/qq_37325947/article/details/107819945
25 java如何兼容不同类型的输入
函数重载
泛型
26 装饰器 @Override
需要你重写
28 类 this
和python self一样,指的是对象
# 类直接调用方法
https://blog.csdn.net/qq_40136594/article/details/83996659
需要是静态方法
1 创建对象 new
1 2 3 4 5 6 7 8 9 10 public class Puppy{ public Puppy(String name){ //这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public static void main(String[] args){ // 下面的语句将创建一个Puppy对象 Puppy myPuppy = new Puppy( "tommy" ); } }
myPuppy不是指针,是强引用
2 继承 1 extends
1 2 3 class 子类 extends 父类 { } //只可以单继承
2 implements
一般用于类继承接口
1 2 3 4 5 6 7 8 9 10 11 public interface A { public void eat(); public void sleep(); } public interface B { public void show(); } public class C implements A,B { }
super关键字:当前对象,但是用来调用父类成员
this关键字:当前对象,用来调用子类成员
关于构造函数:
1 进入子类对应的构造函数
2 若是没有显示调用父类的构造函数,则自动调用;若是显示的调用父类的构造函数(super(),必须写第一句,super.SuperClass() 错误),则显示调用
3 先调用父类,然后调用子类
3 匿名类 https://www.runoob.com/java/java-anonymous-class.html
4 抽象类 作用:抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展,可以避免子类设计的随意性
1 抽象类
特殊的类:抽象类不能实例化对象,会报错
1 2 public abstract class Employee 1 在普通类的基础上加abstract
怎么使用抽象类?
通过类继承的方式使用
2 抽象方法
普通类不能有抽象方法,只有抽象类,或者接口
1 2 3 4 public abstract double computePay(); 1. abstract 2. 只有函数声明,没有函数具体实现 3 子类不是抽象类,需要给出抽象类中的抽象方法的具体实现;子类也是抽象类,那么可以不需要
5 接口 接口并不是类,是抽象方法的集合
1 2 3 4 5 [可见度] interface 接口名称 [extends 其他的接口名, 其他的接口名, 其他的接口名] { // 声明变量,只能是 public static final 类型的 // 抽象方法 } //接口只能继承接口,extends,可以是多继承
怎么使用接口?通过类来实现
1 2 3 ...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ... public class MammalInt implements Animal // Animal是接口
关系:
类和类,继承,只能单继承
类和接口,实现,可以多实现
接口和接口,继承,可以多继承
default
https://blog.csdn.net/qq_35835624/article/details/80196932
配合接口使用
使得接口内的函数可以写方法体,原来全是抽象方法,不能有方法体
29 Lambda表达式 声明的时候需要 ->
https://www.runoob.com/java/java8-lambda-expressions.html
1 2 3 4 5 MathOperation subtraction = (a, b) -> a - b; //声明 System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));//调用 一起 System.out.println("10 - 5 = " + tester.operate(10, 5, (a, b) -> a - b));
30 systerm.gc() 一般情况不需要写这个,jvm自动gc
写这个,显示的gc
31 {}, static{} https://blog.csdn.net/weixin_44279798/article/details/104331263
32 jni 1.java 调用 c++ c++代码打成so -> java加载so
test.java 里面的函数实现用c++写
test_jni.h test_jni.cpp
传数据给c++
https://blog.csdn.net/cgwang_1580/article/details/109498438
33 函数传参 按值传递
如果参数是基本类型,传递的是基本类型的字面量值的拷贝 。
如果参数是引用类型,传递的是引用的对象在堆中地址的拷贝 。
是否会改变原来的变量,看情况
https://www.zhihu.com/question/31203609
34 so load, so unload 1 load system.load()
2 unload