命名
变量、方法:驼峰命名
类:首字母大写+驼峰命名
流程控制
增强型for循环:
for(数据类型 名称 : 数组){
(操作)
}
(意思是遍历数组,从数组的0号元素开始一个个赋值给冒号左边的)
方法
static,静态方法,跟着类一起加载,所以静态方法不能调用非静态方法,因为非静态方法是跟着对象的创建一起加载的。两者出现的时间顺序不一样。同时,可以直接用类名来调用静态方法。
命令行传参:给main方法传递参数
可变长参数:… 必须放在所有参数最后
递归:自己调用自己
构造方法:
-
和类名相同
-
没有返回值
-
作用:
1.new的本质在调用构造方法
2.初始化对象的值 -
注意:
定义有参构造后,如果想使用无参构造,必须显式地定义一个无参构造
IDEA创建构造函数的快捷键:Alt+Ins -
其他:
this. = 意思:等号右边的是传进去的形参,this的那个是当前类自己的参数
OOP
- 面向对象编程的本质是:以类的方式组织代码,以对象的形式封装数据
java中只有单继承 没有多继承
super:
- super用来调用父类的东西 但是不能调用父类私有的东西
- 子类被new了之后先调用了父类的构造函数,因为子类的构造函数里面第一行有一句隐藏代码super();
- super只能出现在子类的方法或者构造方法中,否则会调用Object类
- super和this不能同时调用构造方法
重写:
需要有继承关系,子类重写父类的方法
- 重写方法名必须相同
- 参数列表必须相同(否则变成重载)
- 修饰符:范围可以扩大但不能缩小。比如父类是private,子类可以是public。
- 抛出的异常:范围可以缩小但不能扩大。
- 为什么要重写:父类的功能子类不一定需要或者不一定适合
- 重写的快捷键:Alt+Ins:override
静态方法和非静态方法的区别:
静态方法:方法的调用只和左边定义的数据类型有关 如:
A a = new A();
a.test();//调用A类的方法
B b = new A();
b.test();//调用B类的方法
因为static修饰的方法归类所有,叫类的成员,不是对象的成员
非静态方法:只有非静态方法才能被重写
- 简单来说:静态属于类,非静态属于对象。重写只有方法的重写,没有属性的重写。
多态:
- 即同一方法可以根据发送对象的不同而采用多种不同的行为方式。(一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类或有关系的类))
1.多态只有方法的多态,属性没有多态
2.父类和子类,有联系,才能多态
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象。
Father f1 = new Son();
- 这些方法不能被重写:(没有重写自然就没有多态)
1.static
2.final
3.private
运行顺序:
- 静态代码块(只执行一次,类加载时执行)
- 匿名代码块(跟随对象,对象一创建就会先执行匿名代码块,再执行构造方法)
- 构造方法
抽象:
- 不能去new抽象类,只能靠子类去实现它
- 抽象类中可以写普通方法
- 抽象方法必须在抽象类中
- 继承了抽象类的子类,都必须要把所有抽象方法实现,除非那个子类也是抽象类
- 抽象类不能被实例化
接口:
- 接口中所有的定义其实都是抽象的,都是public abstract修饰的
- 类可以实现借口 implement接口1,接口2,…
- 实现了接口的类,就需要重写接口中的方法
- 利用接口实现多继承
- 在接口中定义的常量是public static final修饰的
- 接口不能被实例化,因为他没有构造方法
java中可以有多个class类,但是只能有一个public class
通过外部类实例化内部类:
Outter outter = new Outter();
Outter.Inner inner = outter.new Inner();
异常
try是监控区域,
catch用于捕获异常并做一些处理处理(从小到大捕获异常),
finally用于处理善后工作(finally无论出现什么都会执行,执行完了再报不能处理的错)
(调出try-catch快捷键:Ctrl + Alt + T)
异常处理的一些经验:
- 处理运行异常时,采用逻辑去合理规避,同时辅助try-catch处理
- 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上try-catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单地调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句去释放占用的资源(IO之类)
其它
a=10;b=20;
""+a+b //输出:1020
a+b+"" //输出:30
- 即:若先出现string类型,加号则变成字符串连接符;若先出现运算,则先运算再连接
- 区间默认为 [ , )