java语言特性
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 | public static void main(String[] args) {} |
一个java文件可以不只有一个main,不同类都可以有自己的main,然后选哪个main呢,也就是选哪个类呢?
选公共类(至多包含一个);若是没有就选用同名类,和文件同名
9 引用
12 数据类型
分类
https://blog.csdn.net/Coding_Zhu/article/details/53096178
本质
https://www.zhihu.com/question/31203609
13 数组
声明
1 | dataType[] arrayRefVar; // 首选的方法 |
创建
1 | arrayRefVar=new dataType[arraySize]; |
多维数组
1 | type[][] typeName = new type[typeLength1][typeLength2]; |
14 foreach
和普通for循环比较,在遍历数组、集合方面,foreach为开发人员提供了极大的方便
1 | for(元素类型t 元素变量x : 遍历对象obj){ |
1 | public class TestArray { |
15 从控制台读取数据
1 BufferedReader
1 | 1 throws IOException |
2 Scanner
16 类型转化
http://c.biancheng.net/view/796.html
1自动类型转换
- 两种数据类型彼此兼容
- 目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)
2 强制类型转换
所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。
1 | int a = 3; |
17 异常处理
http://c.biancheng.net/view/6751.html
Exception 是异常的基类
1 语句抛出异常
try
1 | try{ |
throw
当 throw 语句执行时,它后面的语句将不执行,此时程序转向调用者程序,寻找与之相匹配的 catch 语句,执行相应的异常处理程序。如果没有找到相匹配的 catch 语句,则再转向上一层的调用程序。这样逐层向上,直到最外层的异常处理程序终止程序并打印出调用栈情况。
1 | throw ExceptionObject; |
2 方法抛出异常
throws
函数声明异常,但是本身不处理异常,交给调用者处理
1 | returnType method_name(paramList) throws Exception 1,Exception2,…{…} |
1 | import java.io.FileInputStream; |
1 | public static void main(String[] args) throws Exception |
20 final
https://zhuanlan.zhihu.com/p/60889552
21 static
https://zhuanlan.zhihu.com/p/70110497
22 泛型
目的:为了兼容多种数据类型,和c++模板很像
泛型标记符
1 | E - Element (在集合中使用,因为集合中存放的是元素); |
1 泛型函数
1 | public void printArray( int [] inputArray ) -》public < E > void printArray( E[] inputArray ) |
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 | \d{7,8} //7为或者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 | public class Puppy{ |
myPuppy不是指针,是强引用
2 继承
1 extends
1 | class 子类 extends 父类 { |
2 implements
一般用于类继承接口
1 | public interface A { |
super关键字:当前对象,但是用来调用父类成员
this关键字:当前对象,用来调用子类成员
关于构造函数:
1 进入子类对应的构造函数
2 若是没有显示调用父类的构造函数,则自动调用;若是显示的调用父类的构造函数(super(),必须写第一句,super.SuperClass() 错误),则显示调用
3 先调用父类,然后调用子类
3 匿名类
https://www.runoob.com/java/java-anonymous-class.html
4 抽象类
作用:抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展,可以避免子类设计的随意性
1 抽象类
特殊的类:抽象类不能实例化对象,会报错
1 | public abstract class Employee |
怎么使用抽象类?
通过类继承的方式使用
2 抽象方法
普通类不能有抽象方法,只有抽象类,或者接口
1 | public abstract double computePay(); |
5 接口
接口并不是类,是抽象方法的集合
1 | [可见度] interface 接口名称 [extends 其他的接口名, 其他的接口名, 其他的接口名] { |
怎么使用接口?通过类来实现
1 | ...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ... |
关系:
类和类,继承,只能单继承
类和接口,实现,可以多实现
接口和接口,继承,可以多继承
default
https://blog.csdn.net/qq_35835624/article/details/80196932
配合接口使用
使得接口内的函数可以写方法体,原来全是抽象方法,不能有方法体
29 Lambda表达式
声明的时候需要 ->
https://www.runoob.com/java/java8-lambda-expressions.html
1 | MathOperation subtraction = (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()