004:Java面向对象

相关术语

OOP :oriented object program,面向对象编程
OOA:oriented object analyze,面向对象分析
OOD:oriented object design,面向对象设计

面向对象的概念

  • 理解面向对象

面向对象是相对于面向过程而言
面向对象和面向过程都是一种思想
面向过程强调的是功能和行为
面向对象将功能封装进对象,强调具备了功能的对象
面向对象是基于面向过程的

  • 面向对象的特点

是一种符合人们思考习惯的思想
可以将复杂的事情简单化
将程序员从执行者转换成了指挥者
完成需求时:先要去找具有所需的功能的对象来用;如果该对象不存在,那么创建一个具有所需功能的对象;这样简化开发并提高复用。

  • 面向对象开发,设计,特征

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
设计的过程:其实就是在管理和维护对象之间的关系。
面向对象的特征:
封装:encapsulation
继承:inheritance
多态:polymorphism

类和对象的关系

使用计算机语言就是不断的在描述现实生活中的事物。
Java中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义。
对象即时该类事物实实在在存在的个体

  • 类的定义

生活中描述事物无非就是描述事物的属性行为
如:人有身高,体重等属性,有说话,打球等行为。
Java中用类class来描述事物也是如此。
属性:对应类中的成员变量。
行为:对应类中的成员函数。
定义类其实在定义类中的成员。(成员变量和成员函数)。
定义方式:
class 类名{
成员属性1;
成员属性2;
成员函数
}

  • 成员变量和局部变量的区别?

成员变量:
1.成员变量定义在类中,在整个类中都可以被访问。
2.成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
3.成员变量有默认的初始化值。
局部变量:
1.局部变量只定义在局部范围内,如:函数内,语句内等。
2.局部变量存在于栈内存中。
3.作用的范围结束,变量空间会自动释放。
4.局部变量没有默认的初始化值。

  • 创建对象使用对象
class ClassDemo
{
    public static void main(String[] args){

    Person p = new Person();
    p.age = 18;
    p.weight = 90;
    p.hight = 160;
    System.out.println("年龄:"+p.age+"身高:"+p.hight+"体重:" + p.weight);
    p.run();
    }
}

class Person
{
    int age;
    int weight;
    int hight;

    void run(){
        System.out.println("正在跑......");
    }
}
  • JVM堆栈初探
  • 匿名对象

匿名对象是对象的简化形式
匿名对象的两种使用情况
1:当对象方法仅进行一次刁艳红的时候
2:匿名对象可以作为实际参数进行传递

封装

封装:是指隐藏对象的属性和实现细节仅对外提供公共的访问方式。
好处:将变化隔离;便于使用;提高重用性;提高安全性。
封装的原则:将不需要对外公开的内容都隐藏起来,把属性都隐藏提供公共方法对其访问。

  • private,私有的,关键字

构造函数


如果没有定义构造函数,系统会自动给一个空构造函数
如果定义了其他构造函数,系统不再分配空构造函数,需要手动写

  • 构造代码块

静态代码块在类加载之间执行
静态成员之间可以互相访问,按序执行
静态成员不可以访问非静态成员,因为静态成员先于非静态成员加载
非静态成员可以访问静态成员
静态成员通过类访问
非静态成员通过对象访问

注意点:main函数为什么是静态的?
因为如果main函数是非静态的,加载main函数首先得创建对象,创建对象得加载main函数所以这样导致死循环,程序不能运行,所以main函数必须是静态的。

Javabean
pojo:plain old java object 普通古老的Java对象
对象的成员变量有相应的get和set方法,通过get和set方法来访问成员变量

this关键字

特点:this代表其所在函数所属对象的引用,换而言之this代本类对象的引用
什么时候用this关键字?
当在函数内所需要用到调用该函数的对象时就用this
this()访问构造函数,this()的调用必须放到第一条语句,放到后面报错

static静态关键字

static关键字:用于修饰成员(成员变量和成员函数)
被修饰以后的成员具备以下特点:
1:随着类的加载而加载
2:优先于对象存在
3:被所有对象所共享
4:可以直接被类名调用
使用注意:

静态方法只能访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的

继承

  • 继承的概述

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
多个类可以称为子类,单独这个类称为父类或者超类。
子类可以直接访问父类中的非私有的属性和行为。
通过extends关键字让类与类之间产生继承关系
class SubDemo extends Demo{ }
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。

  • 继承的特点
  • super关键字

super()
访问超类的构造函数
必须是第一行代码
构造函数的首行要么是this()要么是super()默认是super()

  • 函数覆盖override
  • 子类的实例化过程
  • final关键字
  • 抽象类-AbstractClass

    • 抽象类概述
    • 抽象类的特点
    • 示例
class AbstractClass
{
    public static void main(String[] args){
        Dog d = new Dog();
        d.run();
    }

}

abstract class Animal
{
    abstract public void run();
}

class Dog extends Animal
{
    public void run(){
        System.out.println("run......");
    }

}

  • 抽象类相关问题

    抽象类中是否有构造函数?
    抽象类中是有构造函数的
    抽象关键字abstract不可以和那些关键字共存?
    private+abstract
    final+abstract
    抽象类中可不可以没有抽象方法?
    抽象类中是可以没有抽象方法的

  • 接口

    • 接口的特点
    • 抽象类和接口

多态

  • 成员变量可以被覆盖,成员函数不能被覆盖。

内部类

GUI:grapphic user interface,图形用户接口

适配器模式

GOF:gang or four,四人帮


class AdapterDemo{
    public static void main(String[] args) {
        Button b1 = new Button();
        /* b1.addListener(new MouseListener(){
            public void onClick(){
                System.out.println("single click!");
            }
            public void onDclick(){
                System.out.println("double click!");
            }
        });*/
        b1.addListener(new MouseAdapter(){
            public void onClick(){
                System.out.println("single click");
            }
            public void onDclick(){
                System.out.println("double click");
            }
        });
        b1.click();
        b1.doubleClick();
    }
}

class Button{
    private MouseListener listener;
    public void addListener(MouseListener listener){
        this.listener = listener;
    }
    public void click(){
        listener.onClick();
    }
    public void doubleClick(){
        listener.onDclick();
    }
}

// mouse listener
interface MouseListener{
    public void onClick();
    public void onDclick();
    public void rightClick();
    public void xxClic();
}
// mouse adapter
abstract class MouseAdapter implements MouseListener
{
    public void rightClick(){}
    public void xxClic(){} 
}

异常:Exception

  • 异常的体系
    • Throwable:可抛出的,是多有异常和错误的超类。
      throw:抛出异常对象的指令。
      throws:在方法中声明抛出异常的关键字。
      • Error
        • 通常出现重大问题如:运行的类不存在或者内存溢出等。
        • 不编写针对代码对其处理
      • Exception
        • 在运行时出现,可以通过try catch finally处理
    • Exception和Error的子类名都是以父类名作为后缀。

1 : java.lang.NullPointException.
2 : ...ArryIndexOutOfBoundsException.
3 : ClassCastExceptionl.

可以有多个catch语句,但是catch语句的顺序要注意,子类的catch语句应该放在前面,否则代码不可达。编译也不能通过,这是违反逻辑的。
方法在重写时,不能声明抛出新的异常,只能是原有的异常体系(异常的子类是可以的)。
throw抛出异常后,后面的代码不执行。
try,catch捕获异常,后面的代码继续执行。

包:package

1:对类文件进行分类管理
2:给类提供多层命名空间
3:写在程序文件的第一行
4:类名的全称是:包名.类名
5:包也是一种封装形式

完整类名:包名 +“.” + 类名,例如:cn.com.xxx.ClassName
例如:package cn.com.xxx
包的编译:
javac -d classes ClassName.java(-d:指定存放classes文件的位置,同时生成对应的文件夹目录树)
javac -cp classes -d .xxx.java(-cp指定编译程序时需要搜索的类路径顺序。)
包的执行:
java -cp classes cn.com.think.ClassName(运行Java程序需要指定类的完整类名)
含有包名的类需要使用public修饰,否则无法在其他的包中访问。
public class ClassDemo{

}
引入包 中的类需要使用import关键字。
import cn.com.think.ClassDemo
public class xxxx{
,}

包之间的访问

1:被访问的包中的类权限必须是public
2:类中的成员权限public或者protected
3:protected是为其他包中的子类提供的一种权限


jar :是Java archive,Java归档或者叫打包。
另外还有war,ear,har等
可用jar -h查看帮助示例
1:将foo目录下的所有文件进行归档,生成xxx.jar
jar cvf xxx.jar -c foo/ .
2:归档时指定入口点,会在清单文件中添加main-class属性
jar cvfe xxx.jar cn.com.think.e.E -c foo/classes .
3:通过jar文件执行程序
java -cp xxx.jar cn.com.think.e.E
java -cp xxx.jar;yy.jar;classes;..;d:\xx cn.com.think.e.E
java -jar xxx.jar

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

推荐阅读更多精彩内容