JAVA学习9
今天上午看了一上午论文,弄得好没激情,回去看了一会java书,然后睡觉,起来的时候问自己每天叫醒自己的是什么,突然不知道回答什么,是梦想吗
IDEA安装
idea的组织方式:
project ——>module
eclipse的组织方式:
workspace ——>project
快速生成main方法:psvm
快速生成System.out.println(): sout
注意:IDEA是自动保存,不需要crtl+S
删除一行:crtl+y
左侧窗口中的列表怎么展开?怎么关闭?
左箭头关闭;
右箭头展开;
上下箭头移动
idea中退出任何窗口,都可以使用esc键
任何新增/新建/添加:alt+insert
窗口变大/变小:crtl+shift+F12
切换java程序:从两个程序之间切换: alt+左箭头;alt+右箭头
运行:crtl+shift+F10
切换窗口:alt+标号
提示方法的参数:crtl+P
单行注释:crtl+/
多行注释:crtl+shift+/
idea中怎么定位方法/属性/变量?
光标停到某个单词下面,这个单词可能是:方法名、变量名;停到单词下面,按crtl键,出现下划线,点击跳转
crtl+d直接复制一行
alt+回车 纠错
两次shift 弹出搜索框
查看某一个类的属性和方法 alt+F12
crtl+点击单词 可以跳转到类或方法中
重命名 shift+F6
一次编辑多行:按住alt,下拉,然后编辑
idea自动编译,不需要手动编译
工程Project的根就是IDEA的默认当前路径。
ifn快捷键 = if (变量 == null)
final
1.final是java语言中的一个关键字
2.final表示最终的,不可变的
3.final可以修饰变量以及方法,还有类等
4.final修饰的局部变量?
final修饰的局部变量,一旦赋值不能重新赋值;
final修饰的变量,只能赋一次值
5.final修饰的方法?
final修饰的方法无法覆盖,无法重写
final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。
此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法,
因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(注:类的private方法会隐式地被指定为final方法。)
6.final修饰的类?
final修饰的类无法继承
7.final修饰的变量,如果是一个引用会怎样?
引用也是一个变量,final修饰的变量只能赋一次值
该引用只能指向一个对象,并且它只能永远指向该对象,无法再指向其他对象。并且在该方法执行过程中,该引用指向对象之后,该对象不会被垃圾回收器回收,直到当前方法结束后,才会释放空间。
虽然final的引用指向对象A后,不能再重新指向对象B。但是对象A内部的数据可以更改。
8.final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值,这个手动赋值,在变量后面赋值可以,在构造方法中赋值也行
final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;
第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
class Solution{
final String s;
//如果不赋值会报错,需要在所有构造函数中对其赋值
public Solution(String s){
this.s = s;
}
public Solution(){
s = " ";
}
}
这样写会有错误,必须手动赋值
回顾:实例变量在什么时候赋值?在构造方法执行的时候赋值,在创建对象的时候赋值
系统赋默认值也是在构造方法执行的时候赋值,没有写构造方法的时候,默认有个无参构造,赋了默认值为0,
所以final 修饰的实例变量没有赋值的时候会报错。因此用final修饰时,需要在系统赋默认值之前赋值
自测:(final修饰实例变量)如果同时有无参构造方法和有参构造方法,然后创建对象时调用有参构造方法赋值时,会报错,显示需要赋值;
这时可以取消无参构造,或者在无参构造中随便赋一个值(这个值不影响调用有参构造的赋值)
9.final 修饰的实例变量,一般添加static修饰(因为不能变),节省内存(static final int i=0)
存储在方法区
10.终极结论:用static和final联合修饰的变量称为“常量”,常量名建议全部大写,每个单词之间用下划线连接
常量实际上和静态变量一样,区别在于:常量的值不能变
常量和静态变量都存储在方法区,并且都是在类加载时初始化
常量一般都是公开的(加public),因为常量改不了
例如:public static fianl double PI = 3.1415926;
抽象类
类和类之间有共同特征,将这些具有共同特征的类再进一步抽象形成了抽象类,由于类本身是不存在的,所以抽象类无法创建对象;
抽象类也可以再进一步抽象
类到对象是实例化,对象到类是抽象
类本身是不存在的,所以抽象类无法创建对象,或无法实例化,所以抽象类是用来被子类继承的(抽象类的子类也可以是抽象类)
final和abstract不能联合使用,这两个关键字是对立的,非法的修饰符组合
抽象类也属于引用数据类型
怎么定义?
[修饰符列表] abstract class 类名{
类体;
}
抽象类虽然无法实例化,但是抽象类中有构造方法,这个构造方法是供子类使用的
抽象类关联到一个概念: 抽象方法,什么是抽象方法?
抽象方法是没有实现的方法,没有方法体的方法。例如:
public abstract void doSome();
抽象方法的特点是:
1.没有方法体,以分号结尾
2.前面修饰符列表中有abstract关键字
抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中
重要结论:一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现了。这里的覆盖或者重写,称为对抽象方法的实现;抽象类继承抽象类,不一定要覆盖或者重写抽象方法
判断:java语言中凡是没有方法体的方法都是抽象方法
不对,错误的
Object类中有很多方法都没有方法体, 都是以“;”结尾的,但他们都不是抽象方法;例如:
public native int hashCode();
这个方法底层调用了C++写的动态链接库程序
前面修饰符列表里面没有:abstract。有一个native,表示调用JVM本地程序