`
zhongsw
  • 浏览: 24372 次
文章分类
社区版块
存档分类
最新评论

黑马程序员_Java基础知识对象的三大特性及相关知识点

阅读更多

---------------------- android培训java培训 、期待与您交流! ----------------------

 

 

 

面象对象编程 OOP  =Object Oriented Programming

针对 OOP 还有一种 Aspect Oriented Programming(AOP) 代理模式实现 , 是叫面象切面编程 .

所有的事物都有两个方面:

有什么(属性):用来描述对象。

能够做什么(方法):告诉外界对象有那些功能。

后者以前者为基础。

大的对象的属性也可以是一个对象。

 

面象对象三大特征 : 封装 , 继承 , 多态 .

匿名对象 :Car c=new Car();

                c.num=5;

上面等同于 : new Car().num=5;

匿名对象调用对象的属性没意义 .. 经常用匿名来调用方法 .

什么时候使用匿名对象 ?

1.       当对对象的方法只调用一次时可以用匿名对象来完成 , 这样写比较简化 . 但如果进行多个成员调用就必须给这个对象起个名字 .

2.       可以将匿名对象作为实际参数进行传递 .

main()

{

       show(new Car());

}

public static void show(Car c)

{

       c.num=5;

       c.run();

}

 

封装 : 是指隐藏对象的属性和实现细节 , 对外仅提供公共访问方式 .

好处 : 将变化隔离 . 便于使用 . 提高复用性 . 提高安全性 .

封装原则 : 将不需要对外提供的内容隐藏起来 , 把属性都隐藏 , 仅对处提供公共方法对其访问 .

封装属性用 private 来修饰 . 封装后要提供外部对其访问的接口 . 之所以提供访问方式 . 就因为可以在访问方式中加入逻辑判断等语句 , 对访问的数据进行操作 , 提高代码的健壮性 .

构造函数什么时候定义呢 ?

当分析事物时 , 该事物存在具备一些特性或者行为 , 那么将这些内容定义在构造函数中 .

面试时候会用到 . 构造代码块 ,, 作用 : 给对象初始化 , 对象一建立就运行 . 而且先去构造函数 . 构造代码块是给所有对象进行统一初始化 . 定义一些对象共性初始化内容 .

 

this 关键字 , 用于区分局部变量和成员变量同名的情况 . 前面加上 this 就代表本类的对象 . 它代表它所在函数所属对象的引用 . this 相对的是 super 他对应父类的

this 的应用 . 当定义中的功能时 , 该函数内部要用到调用该函数的对象时 . this 来表示这个对象 , 只要是本类功能内部使用了本类对象 , 都可以用 this 来表示 .

this 语句构造函数间调用 .

public class ConstructorTransfer {

    public static void main(String[] args){

    // 调用 Person(String name,int age){   }   

Person p = new Person( "lisi" ,20);

    }

 

class Person{

    private String name ;

    private int age ;

   

    Person(){

          

    }

    Person(String name){

       // 调用 Person(){ }

this ();

    }

    Person(String name, int age){

       // 调用 Person(String name){ }

this (name);

       this . age =age;

    }

}

this 语句只能定义在构造函数第一行 .

 

Static 关键字 .

静态方法只可以访问静态成员 .

因为静态优先于对象存在 , 所以静态中不可以出来 this super 关键字 .

在什么时候定义静态函数呢 .?

当功能没有访问到对象的非静态数据 ( 对象的特有数据 ) , 那么该功能可以定义为静态 , 静态函数也只能访问静态成员 .

给主函数传递参数

 

静态的应用 - 工具类

工具类中每一个方法都没有用到对象中的特有数据 , 可以将方法名都定义成静态的通过类名调用 , 为了更为严谨 , 强制让该类不能建立对象 , 可以通过构造函数私有化 .

 

静态代码块特点 : 随着类的加载而执行 , 只执行一次 , 并先于主函数执行 . 用于给类进行初始化的 .

static

{

    syso(“ 这是静态代码块 ”);

}

 

{

    syso(“ 这是构造代码块 , 用来给所有对象统一初始化的 .”);

}

 

 

public class MainDemo {

 

    /**

      * @param args

      */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       System. out .println(args. length );

       System. out .println(args[0]);

    }

}

用上面的类在 Myeclipse Run As- à Run Configurations.. 里边的 Arguments 中传递参数

Test1

Test2

Test3

运行上面的程序输出的结果为 :

3

Test1

上面的在命令行窗口也可以执行 , 直接在 java 类名 后面加上空格和要加的参数 , 参数之间用空格隔开 .

 

Javadoc 制作帮助文档 . 

/**

@param                       这是显示参数的

@return                       这是显示返回值的 .

*/

 

单例设计模式 : 分为懒汉式和饿汉式

开发中常用饿汉式 , 面试经常会考懒汉式 .

饿汉式对象建立时就初始化 .

// 饿汉式

class SingleE{

    private SingleE(){ }

    private static SingleE s1 = new SingleE();

    public static SingleE getInstance(){

       return s1 ;

    }

}

// 懒汉式 为了保证安全同步代码块 .

class SingleLan{

    private static SingleLan s2 = null ;

    private SingleLan(){ }

    public static SingleLan getInstatce(){

       if ( s2 == null ){

           // 同步使用的锁是该类的字节码文件 .

           synchronized (SingleLan. class ) {

              if ( s2 == null )

                  s2 = new SingleLan();

           }

       }

       return s2 ;

    }  

}

 

面象对象 , 继承  

把对象中的共性描述提取出来单独封装成一个类 , 然后让对象所属的类 extends 这个封装的类 .

继承提高了代码的复用性 , 让类与类之间产生关系 , 有了这个关系才有了对象的多态性 .

必须是类与类之间有所属关系才可以继承 , 不能单独的为了实现某功能而继承 . 所属关系 is a

Java 是单继承多实现 , 支持多层继承 .

继承  查阅父类功能 , 创建子类对象使用该功能 .

当之类继承父类 , 沿袭了父类的功能到子类中 , 但子类的该功能和父类的不一致时没有必要定义新功能 , 而是使用覆盖 (Override), 保留父类的功能定义 , 并重写功能内容 .

Override 时要保证子类的权限不能比父类的权限小 .

在对子类对象进行初始化是地 , 父类的构造函数也会运行 , 因为子类的构造函数默认第一行都有一条隐式的语句 super());

super(): 会访问父类中空参数的构造函数 . 而且中所有的构造函数默认第一行都是 super());

为什么子类一定要访问父类中的构造函数 .?

因为父类中的数据子类可以直接获取 , 所以子类建立对象时 , 需要先查看父类是如何对这些数据进行初始化的 .

如果要访问父类中指定的构造函数 , 可以通过手动定义 super 语句的方式来指定 .

Super() 语句一定子类构造函数的第一行 .

子类的实例化过程 .

子类中所有的构造函数默认都会访问父类中空参数的构造函数 . 当父类中没有空参的构造函数时 , 子类必须通过 super 语句形式来指定要访问的构造函数 . 子类的构造函数第一行也可以手动指定 this 语句来访问本类中的构造函数 . 子类中至少会有一个构造函数会访问父类中的构造函数 .

 

final 关键字

final 修饰的类不可以被继承

final 修饰的变量是一个常量 , 只能被赋值一次 .

final 修饰的方法可以被继承 .不可以被覆盖

内部类只能访问被 final 修饰的局部变量 .

 

抽象类

抽象方法

当多个类中出现相同功能 , 但是功能主体不同 . 这时可以进行向上抽取 . 只抽取功能定义 , 而不抽取功能主体 . abstract 来修饰 . 抽象方法必须存放在抽象类中 . 抽象类不可以 new 创建对象 .. 抽象类中的方法要被使用 , 必须由子类复写所有的抽象方法后 , 建立子类对象调用 . 如果子类只覆盖了部分抽象方法 . 那么该子类还是一个抽象类 .

 

模板方法设计模式 .

在定义功能时 , 功能的一部分是确定的 , 但是有一部分是不确定 , 而确定的部分在使用不确定的部分 , 那么这时就将不确定的部分暴露出来 , 由该类的子类去完成 .

 

 

接口 Interface

格式特点 :

1.        接口中常见定义 : 常量 , 抽象方法 .

2.        接口中的成员都有固定修饰符

常量 :public static final

方法 :public abstract

接口中的成员都是 public

接口 : 是不可以创建对象的 , 因为有抽象方法 . 需要被实现 , 子类对接口中的抽象方法全都覆盖后 , 子类才可以实例化 , 否则子类是一个抽象类 .

接口可以被类实现 , 一个类可以实现多个接口 , 也是对多继承不支持的转换形式 ,Java 支持多实现 .

 

面象对象第三大特性 多态

多态可以理解为事物存在的多种体现形态 .

Animal c=new cat;

1.        多态的体现

父类的引用指向自己的子类对象 .

父类的引用也可以接收自己的子类对象 .

2.        多态的前提

必须是类与类之间有关系 , 要么继承 , 要么实现 .

通常还有一个前提 , 存在覆盖 .

3.        多态的好处

多态的出现大大的提高程序的扩展性 .

4.        多态的应用

5.        多态的弊端

提高了扩展性 , 但是只能使用父类的引用访问父类中的成员 .

 

6.        多态的出现代码中的特点

在多态中成员函数的特点 :

在编译时期 : 参阅引用型变量所属的类中是否有调用的方法 , 如果有 , 编译通过 , 如果没有 , 编译失败 .

在运行时期 : 参阅对象所属的类中是否有调用方法 .

简单总结就是编译时看左边 , 运行时看右边 .

 

在多态中 , 成员变量的特点 :( 非静态的 )

无论编译和运行 , 都参考左边 ( 引用型变量所属的类 )

 

多态类型提升 , 向上转型

强制将父类的引用转成子类类型 . 向下转型

 

面向对象 , 内部类 .

内部类的访问规则 :

  1. 内部类可以直接访问外部类中的成员 , 包括私有 .

因为内部类中持有了一个外部类的引用 , 格式   外部类名 .this

  1. 外部类要访问内部类 , 必须建立内部类对象 .

 

 

如果要直接访问内部类中的成员 , 成员变量要写内部类的全名 , 要说明该内部类属于哪一个外部类 .

注意匿名内部类的书写规范 .

匿名内部类 :

1.        匿名内部类其实就是内部类的简写格式 .

2.        定义匿名内部类的前提 :

内部类必须是继承一个类或者实现接口 .

3.        内部类的格式 .:  new 父类或者接口 ( ){ 定义子类的内容 }

4.        其实匿名内部类就是一个匿名子类对象 .( 定义类和建立对象封装在一起 ). 可以理解为带内容的对象 .

5.        匿名内部内中定义的方法最好不要超过 3 .

 

 

 

---------------------- android培训java培训 、期待与您交流! ----------------------

分享到:
评论

相关推荐

    黑马程序员_Java基础辅导班教程课件[第01期]第15天

    《黑马程序员_Java基础辅导班教程课件[第01期]第15天》是针对初学者设计的一堂深入浅出的Java编程课程,旨在帮助学员巩固和深化Java基础知识。这堂课件涵盖的内容广泛且实用,对于想要在IT行业中开启Java开发旅程的...

    黑马程序员_Java基础辅导班教程课件[第01期]第13天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...

    黑马程序员_Java基础辅导班教程课件[第01期]第11天

    "黑马程序员_Java基础辅导班教程课件[第01期]第11天"是一个专门为初学者设计的培训课程,旨在帮助学员深入理解和掌握Java的核心概念。这个课程可能是通过视频形式进行的,结合了理论讲解和实际操作,以便让学习者能...

    黑马程序员_Java基础辅导班教程课件[第01期]第8天

    【Java基础辅导班教程课件】是针对初学者设计的一系列教学资源,旨在帮助学习者扎实掌握Java编程语言的基础知识。第01期第8天的课程内容可能涵盖了上一阶段的学习总结,以及新的概念和技术的引入。在这个阶段,学员...

    黑马程序员_(适合初学者入门的Java基础视频)

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。...配合"黑马程序员_(适合初学者入门的Java基础视频).txt"文本资料,学习者还可以查阅相关知识点和代码示例,进一步提高学习效率。

    黑马程序员_Java基础辅导班教程课件[第01期]第10天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第10天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java的核心概念。通过这个阶段的学习,学员将能够理解并运用Java的...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02

    《黑马程序员_hibernate框架开发2016版讲义...通过对黑马程序员提供的这门课程的学习,开发者不仅能掌握Hibernate的核心概念和技术,还能提升在实际项目中的数据库操作效率,为构建高效、稳定的Java应用打下坚实基础。

    黑马程序员_Java基础辅导班教程课件[第01期]第7天

    2. **封装**:封装是面向对象编程的三大特性之一,它隐藏了对象的内部细节,仅通过公共接口(方法)与外界交互,以提高代码的安全性和可维护性。 3. **继承**:继承允许一个类(子类)继承另一个类(父类)的属性和...

    黑马程序员_Java基础辅导班教程课件[第01期]第6天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第6天"中,我们主要聚焦于Java编程语言的基础知识,这通常包括了变量、数据类型、运算符、流程控制语句等核心概念。此课程面向初学者,旨在为学员构建坚实的Java编程...

    黑马程序员_Java基础辅导班教程课件[第01期]第4天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...

    黑马程序员_Java基础辅导班教程课件[第01期]第9天

    本课程是"黑马程序员"推出的Java基础辅导班教程,专注于Java初学者,特别是第01期的第9天内容。在这个阶段,学员将深入学习Java编程语言的核心概念,为后续的进阶学习打下坚实的基础。课程通过丰富的课件、图片和...

    黑马程序员_超全面的JavaWeb教程-视频+源码笔记

    涵盖了JSP指令元素、脚本元素、内置对象以及自定义标签等知识点。 4. **Filter与Listener**:对于这两个重要的组件也进行了深入剖析。通过具体案例演示了如何编写过滤器和监听器,并讨论了它们在实际项目中的应用...

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    黑马程序员_javaWEB讲义和笔记资料_day08

    在"黑马程序员_javaWEB讲义和笔记资料_day08"中,我们可以预见到这一天的学习内容将深入到Java Web开发的核心概念和技术。"传智播客"作为知名的技术教育机构,其课程通常涵盖全面且深入的IT知识,因此这些讲义和笔记...

    黑马程序员_毕向东最新经典Java基础视频

    由于实际视频内容无法直接获取,本篇将依据标题、描述以及部分标签内容,综合分析并展开相关的Java基础知识要点。 ### Java基础概述 Java是一种广泛使用的面向对象的编程语言,它由Sun Microsystems公司在1995年...

    黑马程序员_毕向东_Java基础视频教程第18天-11-IO流(文本文件读取方式二).zip

    在本教程“黑马程序员_毕向东_Java基础视频教程第18天-11-IO流(文本文件读取方式二)”中,主讲人毕向东将深入讲解如何使用Java有效地读取文本文件,特别是第二种常用的方法。以下是关于Java IO流和文本文件读取的...

    黑马程序员_张孝祥_Java多线程与并发库 视频+代码+资料

    根据给定文件的信息,我们可以提炼出以下关于Java多线程与并发库的相关知识点: ### Java多线程基础 1. **线程的概念**:在Java中,线程是程序执行流的基本单元。一个标准的Java应用程序至少有一个线程,即主...

    黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)

    《黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)》是一部针对初学者的全面Android开发教程,旨在帮助学员系统地掌握Android应用开发的基础知识和实战技巧。通过本教程的学习,你可以从理论出发,...

    黑马程序员java基础试题、笔记

    "黑马程序员java基础试题、笔记"这个压缩包资源为Java初学者和希望加入"黑马程序员"培训课程的学员提供了丰富的学习材料。这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须...

Global site tag (gtag.js) - Google Analytics