Java面向对象

Java面向对象

[图片上传中...(null与GC.PNG-72a05e-1543754889476-0)]

1.类

类的定义.PNG

.


类的实例化.PNG

.

2.成员变量与局部变量

.

成员变量与局部变量.PNG

.
int 、double、float默认值为0,String默认值为null,Boolean默认值为false.

3.null与GC

image.png

4.private/public

private public.PNG

Javabean规范:
把成员变量声明为private,读取时使用getxxx方法,设置时使用setxxx方法

private访问权限:只能在当前类中访问

5.构造函数

构造函数.PNG

构造函数的名与类名字一致,没有返回值
在new xx 时被调用
一旦定义一个构造函数,则默认的无参函数将不会提供
.


public class person {

    private int age;
    private String name;
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    
    public person(){           //构造函数
        this.age=5;
        this.name="xxx";        
    }
    
    public static void main(String[] args){
        person p=new person();
        System.out.println("age="+p.age+" "+"name="+p.name);
    }
}

.

6.JavaBean 规范

最好遵循此规则

JavaBean规范.PNG

字段正常用private
.

7.package(包)

包.PNG
example.PNG
\\import java项目名.包名.类名
import OOP.text1.person

.

8.静态static

static静态.PNG

public class Person {
    //声明一个static
    public static int population=0;    
    
    public Person(){
        population++;
    }
    
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
}
package text1;

public class oopText1 {

    public static void main(String[] args) {
        Person p1=new Person();
        System.out.println(Person.population);
        Person p2=new Person();
        System.out.println(Person.population);
        Person p3=new Person();
        System.out.println(Person.population);
    }

}

result:

result1.PNG

.
可以被别的类调用

package text1;

public class oldPerson {
    //调用Person的static
    public oldPerson(){
        Person.population--;
    }
    
}

.
可将static设为“只能读不能写”

//只能读不能写
    public final double pi=3.14;

.
static中不能调用this.
非静态可调用静态量(static),静态不可调用非静态(static)

9.单例模式

单例模式.PNG
package singleton;

public class God {
    //声明一个静态对象
    private static God instance=new God();
    
    //提供一个访问这个对象的static方法
    public static God getGod(){
        return instance;
    }
    
    //把构造函数设为private
    private God(){
        
    }
}
God.getGod();                \\调用单一类对象God

.
无参构造函数中运用this()调用重载构造函数

public class ps {
    //构造函数中可用this()调用重载构造函数,且必须为构造函数中的第一行代码
    public ps(){
        this(0);
    }
    
    public ps(int i){
        System.out.println(i);
    }
}

.

10.枚举(enum)

枚举.PNG
public enum dir {
    //枚举的范围有且只有几个
    right,left,up,down
}
public static void main(String[] args) {
        dir d=dir.down;
        System.out.println(d);
    }

枚举原理:

public class dirSouce {
    private dirSouce(){
        
    }
    
    public static final dirSouce up=new dirSouce();         //创建静态对象
    public static final dirSouce down=new dirSouce();
    public static final dirSouce left=new dirSouce();
    public static final dirSouce right=new dirSouce();
}

static只能初始化一次
.

11.类的静态代码块

类的静态代码块.PNG

在类第一次被使用时执行一次,且在构造函数执行之前执行。有且执行一次

package classStatic;

public class text1 {
    
    static{
        System.out.println("静态代码块2");
    }
    
    public text1(){
        System.out.println("构造函数");
    }
    
    static{
        System.out.println("静态代码块1");
    }
}
package classStatic;

public class ps {
    public static void main(String[] args) {
        text1 a=new text1();
        text1 b=new text1();
        System.out.println(a);
        System.out.println(b);
    }
}

result:


result2.PNG

.

12.继承(Inherit)

继承(inherit).PNG

继承非private成员

//父类
public class animal {
    public void eat(){
        System.err.println("I can eat!");
    }
}
//子类
public class human extends animal {
    public void speak(){
        System.out.println("I can speak!!");
    }
}
public class text2 {

    public static void main(String[] args) {
        human t=new human();
        t.eat();
        t.speak();
    }

}

result:


result3.PNG

.


继承中的构造函数调用顺序.PNG

1.子类创建对象时都会先调用父类的构造函数,再执行自身的构造函数
2.子类无调用父类的重载构造函数,则默认调用父类默认的无参构造函数,相当于super()(前面不能有其他代码)
3.可用super(""/int/double...)调用父类的重载构造函数
4.如果父类没有无参构造函数,则子类必须调用父类的重载构造函数
.

13.private/public/protected

private public protected.PNG

default:

void xxx(){               //default
}

重载问题:调用最接近它的类型(如int,如有object与int,则调用int.如无int,则掉object)

14.多态

多态.PNG

调用时如子类无此方法,则调用父类的此方法。如有,则调用子类自身的此方法

多态2.PNG

.
1.父类类型变量可以指向子类对象,子类类型变量不可以指向父类变量*

    DiQiuRen d=new Chinese();

2.通过父类类型的变量调用一个override类型的方法时,调用的是子类对象的方法。
3.能调用什么方法由变量类型决定,执行谁的方法由指定的对象决定

在override前加@override是个标注,避免函数名写错
.

15.父子类间类型转换

类型转换.PNG
public static void main(String[] args) {
        Chinese c1=new Chinese();
        DiQiuRen c2=c1;
        Chinese c3=(Chinese)c2;    //强制类型转换
    }

super.xxx()表示引用父类的xx方法
this.xx()表示调用当前对象的方法

16.final用法

1.public static final int a=9; 除初始化外,a不能再被修改
2.final 方法,此方法不能再被子类override
3.final 类,此类不能有子类

17.抽象类

抽象类.PNG
//父类抽象,speak方法由子类完成
abstract public class DiQiuRen {
    public abstract void speak();
    
    public void eat(){
        System.out.println("ciciici");
    }
}
public class Chinese extends DiQiuRen {
    //完成父类的speak()方法
    @Override
    public void speak() {
        System.out.println("我是中国人!");

    }

}

.


抽象类子类.PNG

子类必须实现父类的抽象方法,如不实现,要定义成abstract,由子类继续实现

18.匿名内部类

匿名内部类.PNG
public static void main(String[] args) {
        
        DiQiuRen d0=new DiQiuRen();
        System.out.println(d0.getClass());
        
        DiQiuRen d1=new DiQiuRen(){};
        System.out.println(d1.getClass());
        /*等效于:
        class text1$1 extands DiQiuRen(){
        }
        DiQiuRen d1=new text1$1();  
     */
    }
public static void main(String[] args) {
        
        DiQiuRen d1=new DiQiuRen(){
            @Override
            public void speak() {
                System.out.println("I`m the son of DiQiuRen!");
            };
            
            //不能被调用,无意义
            public void go(){           
                this.speak();         
            }
        };
        
        d1.speak();
        d1.go();     //不能调用匿名子类中的方法,因变量类型为父类
    }

匿名类可以定义抽象类的子类,且必须完成抽象类的方法
可直接访问局部变量
.

匿名内部类访问局部变量.PNG

public class text3 {

    public static void main(String[] args) {
        text3 t1=new text3();
        t1.setAge(8);
        t1.f1();
    }
    
    private int age;
    
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void f1(){
        DiQiuRen d1=new DiQiuRen() {
            
            @Override
            public void sayName() {
                int age=7;
                System.out.println(age);
                System.out.println(text3.this.age);   //调用外部类的成员变量
                
            }
        
        };
        d1.sayName();
    }

}

可用类名+this.xx调用外部类成员变量
.

19.接口

接口.PNG
public interface Speakable {    //接口
    void speak();
    void cry();
}

public class man implements Speakable{   //类man实现Speakable接口
    public void speak(){
        
    }
    
    public void cry() {
        
    }
}

.


接口2.PNG

20.异步

GameCore.asyncRun();

GameCore.asyncRun(new Runnable() {
                
                @Override
                public void run() {
                    // TODO 自动生成的方法存根
                    
                }
            });
        }

.

21.回调(addKeyListener)

.
在合适的时机进行调用,不需一直判断

GameCore.addKeyListener(new KeyListener() {
                
                @Override
                public void keyTyped(KeyEvent e) {
                    // TODO 自动生成的方法存根
                    
                }
                
                @Override
                public void keyReleased(KeyEvent e) {
                    // TODO 自动生成的方法存根
                    
                }
                
                @Override
                public void keyPressed(KeyEvent e) {
                    //按键抬起时执行
                    
                }
            });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335