个人理解:就是把复杂的问题看作一个整体,即对象;然后再去面向过程,在对象里面去实现方法,语句啥的。
面向对象的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据。
从代码运行的角度考虑是先有类后有对象。类是对象的模板。
个人理解:在编程过程中,一定是先创建一个类,然后就可以用类去创建很多个对象!妙啊!!
break和return的区别:break:跳出switch,结束循环;return结束方法,返回一个结果。
区分:
Alt + Insert 快捷键,生成有参函数无参函数
默认存在一个无参构造方法,生成一个有参构造方法之后,默认存在的无参构造方法就没了,需要重新手动去生成它。
super和 this:
重写都是方法的重写,和属性无关
因为:定义的是什么类,就调用什么类的静态方法
快捷键:Alt + Insert ----->选择Override Methods...
static final private 这些修饰符修饰的方法没有多态,因为它们重写都不能被重写,更别谈多态了啊!!!
个人理解:当父类引用指向子类对象时:
个人理解:
我们学这里的类型转换,是为了在父子继承中,去使用子类中特有的方法,而不是重写的方法;
(其实就是父类不能直接使用子类中特有的方法,所以强转一下,把自己伪装成子类,然后就可以去使用子类中的方法了,哈哈,妙啊!????????????????????????)
借鉴评论大神理解:
低(子类)转高(父类)时,由于子类已经继承了父类的所有方法了,所以只需要删除子类中自己独有的一些方法,自然而然就转换成父类了;
而父类转换为子类,就需要重新去开辟出属于子类的空间,则需要强制转换!妙极啊!????????????????????????
在类中,类( 或者静态的方法)可以去直接访问静态的方法(或静态变量),但是不能访问非静态的方法(或非静态变量)(类也不能去访问非静态的方法(或非静态变量));
而非静态的方法却可以直接访问静态方法,这是为什么呢?
因为在类加载的过程中,静态方法、静态变量以及常量也被存入了方法区,或者说类加载的同时,静态方法、静态变量以及常量是一起被加载的。所以就可以直接调用了,像非静态的方法还没被加载进内存,所以就不能去访问非静态的方法。
抽象类的所有方法必须要由它的子类去实现,但是假如它的子类也是一个抽象类,那就要由它子类的子类去实现它的方法了。以此类推...
个人理解:就是无限套娃。。。
Java里,extends是单继承,类没有多继承,但是接口有多继承
接口必须要有实现类
异常处理的五个关键字:
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 0;
//假如要捕获多个异常,要按照捕获范围,从小到大
try {//try监控区域
System.out.println(a/b);//捕获到一个异常后就直接跳出监控区域,即下面一行代码不执行了
new Test().a();
}catch (ArithmeticException e){
//捕获到异常之后,执行下面的代码
System.out.println("程序出现异常,除法分母不能为零(ArithmeticException)");
}catch (Exception e){
//捕获到异常之后,执行下面的代码
System.out.println("Exception");
}catch (Error e){
//捕获到异常之后,执行下面的代码
System.out.println("Error");
}catch (Throwable e){
//捕获到异常之后,执行下面的代码
System.out.println("Throwable");
}finally {//最后必定执行的语句,可以不要finally,try和catch一定要
System.out.println("finally");
}
}
public void a(){b();}
public void b(){a();}
}
idea中捕获抛出异常的快捷键是:Ctrl + Alt + T------------>由于我的笔记本可能键位冲突,所以我自己改成了Alt + T;(针对跟我一样快捷键没反应的情况)
假如在方法中,处理不了某个异常,就可以主动抛出异常,用throw
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 0;
new Test().test(a,b);
//
}
//假设这个方法中,处理不了这个异常
public void test(int a,int b){
if (b==0){
throw new ArithmeticException();//一般在方法中,去主动抛出异常
}
}
}
如果用try catch ,那么程序抛出异常后可以继续运行,但是如果用throw抛出异常,程序就会停止运行。
public class MyException extends Exception{
private int detail;
public MyException(int a) {
this.detail = a;
}
//toString():异常的打印信息
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
‘}‘;
}
}
public class Test {
//可能会存在异常的方法
static void test(int a) throws MyException {//在这里,我选择了抛出这个异常(throws MyException)
System.out.println("传递的参数为:" + a);
if (a > 10) {
throw new MyException(a);//在这里,我选择了抛出这个异常(throws MyException),抛到更高的地方,让调用这个test方法的人来捕获这个异常,当然也可以选择直接在这里try/catch捕获它
}
System.out.println("OK!");
}
public static void main(String[] args) {
try {
test(11);
} catch (MyException e) {
System.out.println("MyException---->"+e);
}
}
}
面向对象编程(OOP:Object-OrientedProgramming)
原文:https://www.cnblogs.com/niuniu-/p/14640609.html