您的位置:首页 > 编程语言 > Java开发

IDEA使用 Java面向对象

2016-08-05 14:43 155 查看
IDEA使用
快捷键的使用

修改模板

面向对象
例 把大象放冰箱总共分几步

基本知识

断言

包名定义

重载和重写

java中的引用

finalize方法

抽象方法和抽象类

接口

面向对象的三大特征 封装 继承 多态

IDEA使用

快捷键的使用

psvm : main方法

sout : System.out.println()

fori : for循环

Ctrl + Y : 删除当前行

Ctrl+Shift+上下: 移动当前行

Alt + Insert : 快速插入构造方法, getter和setter方法等

a.switch: 快速打开以a为参数的switch

s.nn : 迅速判非空

new String().var : 当变量使用

new String().field : 当属性使用

修改模板

找到Settings -> Editor -> File and Code Templates

面向对象

例: 把大象放冰箱总共分几步?

面向对象

icebox.open();
icebox.boxing(elephant);
icebox.close();


面向过程

open(icebox*);
boxing(icebox*, elephant*);
close(icebox*)


基本知识

//创建对象
//创建对象, 会去调用构造方法
//类中如果没有声明构造方法时会默认生成无惨构造方法
Icebox box = new Icebox(10);
box.open();
//初始化所有属性, 即便是什么都不写
//未赋值的属性为默认值 : 引用对象为空, boolean为false, 其他都为0
public Icebox(int size){
this.size = size;
}


断言:

//断言: 用于调试, 用-ea开启, 如果断言为false, 则抛出异常, 若不开启断言无效
assert e.getSize() < size : "太大!";//用java -ea Demo01命令打开断言


包名定义

域名反转

重载和重写

八竿子打不着关系

重载: 是在一个类中,参数类型,个数,位置不同, 方法名相同

重写:

子类重写父类中的方法, 访问权限不能小于父类的访问权,

返回值类型: 为父类返回值类型或其子类型.

方法名一定相同

参数列表一定相同

声明抛出的异常一定是父类声明抛出的范围内的异常

java中的引用

强引用 : 一般不会回收

软引用 : 内存不足, 会被回收

弱引用

虚引用

finalize方法

一般情况下不需要重写

//当对象对回收时调用的方法, 相当于C++中的析构函数, 不过会自动调用
@Override
protected void finalize() throws Throwable {
super.finalize();
}
System.gc();//唤醒垃圾回收
//垃圾回收机制在一个单独的线程中


抽象方法和抽象类

抽象方法

  抽象方法一定是在抽象类中, 抽象方法没有方法体.

  为了被重写而存在的

  如果继承一个有抽象方法的抽象类时, 一定要重写抽象方法.

抽象类

不能被实例化

接口

接口中没有属性, 只有常量(以static final修饰)

方法: 默认具有public abstract两个关键字

jdk1.8之后, 在返回值之前加上default, 可以在实现接口中不用重写该方法

jdk1.8之后接口可以有静态方法

//实现接口时可以免除重写
public interface Drawable {
default void draw(){
}
}
static void test(){
}


接口主要用于方法的传递

接口不可以被实例化

注意: jdk1.8之后, 如果有这样一个场景: 有两个接口A, B都有两个完全相同的且含有default关键字的方法, 此时实现该接口的类必须重写该方法

实现接口的方法

//普通方式
Drawable drawable = new Rect();
drawable.draw(5);

//匿名内部类
Drawable d = new Drawable() {
@Override
public void draw(int i) {
System.out.println("匿名内部类" + i);
}
};
d.draw(5);

//1.8以后的lambda语法
//限定条件: 只能实现单方法的接口
// ()中写参数 {} 中写方法体
Drawable draw = (i) -> {System.out.println("lambda" + i);};
draw.draw(5);


静态代码块只执行一次, 在类被使用时执行(虚拟机加载类时)

构造代码块(非静态代码块), 在类创建对象时执行

执行顺序

父类静态代码块->子类静态代码块->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法

/**
* Project:Test
* Create:
* Date:16/8/11
*/
public class Person {
protected String name = "二狗子";
static {
System.out.println("父类静态代码块");
}
{
System.out.println(name + "父类代码块");
}
public Person(){
System.out.println(name + "父类构造方法");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public static void say(){

}
}

public class Student extends Person{
private int id = 1000;
static {
//        id = 1;//不能访问
System.out.println("子类静态代码块");
}
{
//        id = 1;//可以访问

System.out.println(name + id + "子类代码块");
}
public Student(){
System.out.println(name + id + "子类构造方法");
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}
}

/**
* Project:Test
* Create:
* Date:16/8/11
*/
public class Test {
public static void main(String[] args) {
//        Student student = null;
//        Student.say();//调用静态方法,先执行父类静态代码块,再执行子类静态代码块,如果静态方法是继承自父类且没重写,只执行父类静态代码块
//        new Person();//静态代码块,构造代码块,构造方法;声明的带赋值语句的属性初始化在构造代码块之前,静态代码块无法访问非静态属性
new Student();//执行子类时顺序,父类静态代码块->子类静态代码块->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法

}
}


面向对象的三大特征: 封装 继承 多态

http://www.cnblogs.com/hnrainll/archive/2012/09/18/2690846.html

封装性, 限制一些属性的访问权限

继承, 子类的分类更加细, 属性和方法更多, 扩展父类.

引用数据类型转换:

自动: 子类对象转为父类对象

强制: 父类对象转为子类对象,可能会产生构造异常

检查是否可以强转的关键字:

//类型检查关键字, 是否为后者的实例
//  引用变量          类
if (thing instanceof Elephant) {
Elephant elephant = (Elephant) thing;
System.out.println(elephant.getLegs());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面向对象