`
IT_nice
  • 浏览: 8782 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_面向对象

阅读更多

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

 

1.面向对象

class

-> 自定义一个类. 

如何定义类. 

class 类名{

成员变量(属性)

成员方法(行为)

}

类是模板,有了类可以根据类创建对象. 

对象

堆内存中的一块实体空间. 

存储了对象的属性. 

new

-> 创建对象. 

通过new 关键字创建对象. 在堆内存开辟了空间.存储了对象的属性. 

类类型 对象名=new 类名();

虽然是通过new 操作符创建的对象, new 操作符返回一个结果,该结果是对象的引用(地址值),非对象本身. 

对象的使用

-> 如何使用对象.

可以通过对象名. 的形式操作对象. 

1. 对象名.属性名=值; 

给对象的属性赋值. 

2. 对象名.属性名

取出对象的属性

3. 对象名.成员方法

执行对象的特有的行为. 

匿名对象

-> 存在的意义.

简化书写的方式.

1. 调用方法 

如果调用成员方法时, 只需要使用一次,可以使用匿名对象. 

new 类名().成员方法();  虽然使用new 操作符创建了一个对象,并执行了该对象的方法,但是只要方法执行完毕该对象

立即变为了垃圾(来及回收是不定时回收的). 

2. 作为方法的实际参数传递的. 

public Car repairCar(Car car){

 

}

Car c=new Car();

repairCar(c);

***************

封装

解决的问题,程序出现了问题. 需要使用该种方式解决? 

 

-> 封装的实现的方式. 

成员变量私有,公有的get set 方法 这就是封装的一种实现方式... 

-> 存在的意义. 

如果使用封装, 在其他类中,可以直接通过对象名.属性名的方式直接访问对象的属性. 可以属性赋值. 

出现非法的数据,对象保存了非法的数据,程序不够安全和健壮了... 

如何有效的过滤非法数据. 

1. 类的成员变量私有

其他类中, 无法通过对象名.属性名的方式直接访问该对象的属性类. 

2. 该类提供公有的get 和set 方法. 

可以在方法中加入逻辑判断,过滤非法的数据.

(只不过偷懒了... )

注意: private 实现方式仅仅是封装的一种体现... 

     方法(函数) 也是封装的一种体现... 

     一段独立功能的程序. 可以解决特定的问题,实现特定的目标... 

     Arrays.sort(数组);

dry  电脑...

主板, cpu ,内存,硬盘,电源... -> 跑了... 

风险高-> 避免安全隐患. 将电脑封装到主机箱中... 

不能封死,对外提供操作... 开机按钮,网卡口... 

对外提供开机按钮,usb ,网卡开口... 

-> 封装的好处:

隐藏了类的具体的实现(侧重隐私的).

成员变量私有的话,对外(其他类)隐藏改成员变量...

如果不提供get 和set 方法的话,在其他类中确实无法访问了... 

提高了对象的数据(属性)的安全性

在set方法中,过滤了非法数据.

提高了程序的可维护性安全性. 

提高了可维护性?

成员变量私有->无法直接通过对象. 属性的形式访问对象的属性了.

但是可以通过get 和set 方法访问... 

可以根据实际需求决定是否要提供get 或者set . 

如果需要对外提供属性->添加get 方法. 

如果需要对象提供修改属性->添加set 方法... 

员工:

工号

get 

no set

工资:

no get

set  

构造函数

作用

初始化对象. 

使用

通过创建对象时, new 操作符后 添加具体的实际参数,jvm 根据实际参数匹配对应的构造函数... 

构造函数在创建对象时,有jvm 根据实际的参数调用的,用于初始化对象的属性的. 

一个类中可以存在多个构造函数,是以重载的形式存在. 

重载: 函数名相同, 参数列表不同的. 

构造函数的特点:

1. 函数名和类名相同

2.没有返回值

3. 没有返回值类型, 和void 不同. 

4. 自定义类,如果没有提供构造函数,编译器提供一个无参数构造(默认),如果自定义了构造函数,默认的无参数构造就没有了

构造代码块

在一个类中直接以一对花括号存在{} 

作用: 初始化对象

构造函数的不同:

只要创建对象就会执行,并且优先于构造函数执行. 在创建对象的整个周期内只执行一次. 

构造函数,jvm 根据具体的实际参数确定对应的构造函数.  

this

含义:

对象的引用. 

使用场景

可以用在成员方法中

可以用在构造函数中. 

作用

1.用在成员方法中,可以区分成员变量和局部变量同名的问题.

set 方法. 

this.成员变量=局部变量. 局部变量的值赋值给了成员变量(属性)

注意:成员方法的依赖于对象. 需要通过对象名.成员方法的形式调用... 

哪个对象调用该方法,方法内部的this 就是那个对象了.

2. 用在构造函数的第一行. 调用本类的其他构造函数. 

this() -> 调用无参数构造. 

this("jack",28); 调用有参数构造.参数一为String,参数二位int 

注意的如果在一个构造函数中,调用本类的另一个构造函数,这个语句需要在第一行.

因为java 希望初始化的动作优先执行... 

static

静态

修饰成员变量

使用场景,作用是什么

类变量, 不需要创建对象,可以直接通过类名来访问了.

静态变量随着类的加载初始化,存在于方法区(类的字节码文件.class 文件也存储在方法区)由于类只加载一次,静态变量只有1份. 

如果对象和对象之间出现了共享的数据,可以使用静态变量. 

实际开发:

public static final  数据类型 常量名=常量值; 

静态和常量和公共一起出现. 

公共的->访问权限最大.都可以直接通过类名访问. 

static -> 静态的,只有1个. 

final  ->最终的,不能被改变的,常量 

public static final dobule PI=3.14

Math.PI . 

修饰成员方法

使用场景,作用是什么. 

如果设计的方法,不想创建对象,就像调用的话,直接将方法设计为静态的... 

什么时候考虑使用这样的方法呢?

设计工具类时, 例如Arrays Collections  Maths 这些工具类...  

为了方便的让大家使用导工具类中的方法,直接将所有方法设置为静态的,有了避免多余的创建对象,将工具类的构造函数私有化. 

只能通过 类名.方法名访问了工具类中的方法了...

静态代码块

随着类的加载而执行,并只执行一次. 

想要执行第二次或者第三次,重新启动程序...  所以在整个正序的运行周期内,只执行一次. 

适合初始化类(程序)

例如: 静态代码块中连接库... 

     图书管理系统初始化书库...

*****************

类和类之间的关系

继承

extends 

解决了什么问题,好处的什么. 

如果类和类之间符合is a 的关系... 

ia a   

xxx 是 yyy 的一种(一类)

可以使用继承建立类和类之间的关系. 

如果建立了继承关系,可以提高代码的复用性,减少重复代码... 

1.描述类和类之间的关系,并减少了重复代码,提高代码的复用性. 

注意:

不要为了减少重复代码就使用继承,要符合is a 关系. 

super

使用场景

子类中. 

1. 访问父类属性. 

2. 访问父类的成员方法. 

3. 访问父类的构造函数. 

在子类的构造函数第一行有默认的语句super() ,创建子类对象时,先默认的调用父类的无参数构造. 

当子类的构造函数中,自定义的调用类父类的构造函数时,默认的super() 就没有了... 

注意: 如果在构造函数中,调用父类的构造函数是,不同同时出现this,调用本类的构造函数. 

都是初始化的动作,都需要在第一行. 

class fu{

private String name; 

fu(){

 

}

fu(String name){

this.name=name;

}

public void setName(String name){

this.name=name;

}

public String getName(){

return name; 

}

}

class zi extends fu{

zi(){

 

}

zi(String name){

super(name);

}

}

class sun  extends zi{

sun(){

 

}

sun(String name){

super(name);

}

}

重写

override 覆盖. 

存在的意义,java设计了重写的意义.

使用前提:

子父类中(实现类实现接口的实现类中),子类继承类父类的方法,如果父类的方法无法满足子类的需求,子类可以重写父类的方法. 增强子类的方法.

核心:

子类是比父类强的. 

使用场景:

子类继承类父类,父类是抽象类,存在抽象方法. 

子类如果调用该方法,必须重写... 

实现类实现类接口,接口中有方法. 

实现类实现类该接口,如果想要调用该方法,必须重写... 

注意:

子类继承父类, 实现类实现接口中. 

函数名要形同,参数类表一致,修饰符(子类>=父类),返回值类型(子类方法返回值类型<=父类方法的返回值类型)

Object 在java 是一个顶层的父类 比较大的. 

Object 子类 就是小的. 

class Animal{}

class Dog extends Animal{}

 

class Father{

Animal getAnimal(){

return new Animal(); 

}

}

class Son extends Father{

public Dog getAnimal(){

return new Dog(); 

}

}

Dog < Animal 

重写只存在于非静态成员方法,和成员变量,静态方法没有关系的... 

final 

使用场景

1.修饰成员变量

普通的变量,可以取值和赋值. 如果不想修改变量的值. 可以将变量设置为常量.final修饰. 

2.修饰成员方法

普通的成员方法(非私有的),子类继承并重写该方法, 如果父类不希望子类重写,可以将方法设置final. 

3.修饰类

如果该类不希望有子类... 

4.修饰形参.

避免形参随意的修改...

抽象类

abstract 

抽象方法:

如果一个类中的成员方法,方法体不明确,无法确定,可以将方法设计为抽象方法,交给子类来实现(重写)

修饰符 abstract 返回值类型 函数名(参数列表);-> 没有方法体的方法,并使用abstract 声明了的就是抽象方法了...  

抽象类:

如果一个类中存在一个以上的抽象方法,该类必须声明为抽象类... 

修饰符 abstract class 类名{

 

}

 

使用场景

实际开发中,将符合is a 关系的类, 组成一个体系, 有所谓的顶层父类和底层的实现类. 

将顶层的父类设计为抽象类,顶层的父类的方法的方法体是不确定(明确)抽象的... 

注意事项

抽象类不能创建对象. 

抽象类中存在抽象方法,功能是不完整,如果能够创建抽象类对象的,调用到抽象方法后,是没有任何意义. 

抽象类可以有成员变量可以有构造函数,可以有非抽象方法 

都是给子类使用的. 体现了继承的思想,提高代码的复用性... 

抽象类当然可以没有抽象方法

目的仅仅是为了禁止创建对象.->如果是抽象类,即使使用反射技术,也无法创建出该类对象...

使用事项:

子类继承抽象类. 

1. 子类要么重写父类中的所有的抽象方法,

子类继承的父类,如果父类还继承的有父类, 子类就需要重写全部的继承下的抽象方法... 

2. 子类要么也声明为抽象类. 

不需要重写抽象方法了,抽象类允许存在抽象方法.      

接口

interface  implements  

语法:

interface 接口名{

public static final 属性; 

public abstract 返回值类型 函数名(); 

}

使用事项:

1.类实现接口要么重写该接口中的所有方法... 

2.类实现接口要么声明为抽象类.

3. 一个类可以同时实现多个接口. 

3. 接口和接口之间是继承关系,一个接口可以继承多个接口.  

思考题:

设计一个类. 

表示古代的皇帝, 

皇帝比较特殊,唯一的... 

如果描述了皇帝类,该类在整个程序中只能创建一个对象. 只能有1个...

创建对象:

如何保证对象的唯一性  

单例设计模式. 

设计模式:

解决一类特定的问题时,发明了特定的代码适合解决该问题... 

单例:

1. 构造函数私有. 

禁止在其他类中创建该类对象. 

2. 本类提供一个本类对象. 

在成员变量的位置设置一个本类对象的成员变量,并初始化(创建本类对象).

3. 提供静态方法获取到这个本类对象. 

 

      

*/

public class Demo1{

public static void main(String[] args){

for(int i=0;i<10;i++){

System.out.println(Emperor.getEmperor());

}

}

}

// 单例(单态)-> 保证该类对象的唯一性...   

class Emperor{

// 本类类型的成员变量. 

private static final Emperor em=new Emperor(); 

 

// 构造函数私有

private Emperor(){

 

}

// 公共静态方法获取到本类对象. 

public  static Emperor getEmperor(){

return em; 

}

}

 

分享到:
评论

相关推荐

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

    《黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02》 本文将深入探讨2016年黑马程序员发布的Hibernate框架开发课程的第二天内容。Hibernate,一个强大的Java持久化框架,简化了数据库操作,为开发者提供了...

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

    《Hibernate框架深度解析——基于黑马程序员2016版教学资料》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。它通过提供数据持久化的对象模型,使得开发者可以...

    黑马程序员_毕向东_Java基础视频教程第05天-01-面向对象(概述).avi

    黑马程序员_毕向东_Java基础视频教程第05天-01-面向对象(概述).avi

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

    3. **面向对象编程**:深入讲解Java的核心特性——面向对象编程,包括类的定义、对象的创建与使用、封装、继承和多态等概念。 4. **数组和集合框架**:介绍数组的使用,以及ArrayList、LinkedList、HashSet、...

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

    总结来说,《黑马程序员_Java基础辅导班教程课件[第01期]第15天》的内容可能涉及了Java语言的核心概念,包括面向对象编程、控制结构、异常处理、文件I/O、集合框架以及内存管理等。通过深入学习和实践这些知识点,...

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

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

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

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

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

    学习Java的面向对象编程概念,如类、对象、继承、多态等,以及异常处理和集合框架,是Android开发的前提。另外,Kotlin作为现代的Android开发语言,也被越来越多的开发者采用,其简洁的语法和安全特性使得编写代码...

    黑马程序员_毕向东_Java基础源码.rar

    这个名为“黑马程序员_毕向东_Java基础源码.rar”的压缩包文件,包含了丰富的Java基础源代码实例,对于初学者来说,是深入了解Java编程的良好资源。 一、Java基本语法 Java语言以其严格的类型检查和面向对象特性...

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

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

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

    【Java基础辅导班教程】- 黑马程序员 在编程世界中,Java是一种广泛应用的面向对象的编程语言,尤其在企业级应用开发中占据主导地位。"黑马程序员"作为知名的IT培训机构,提供了丰富的Java基础辅导课程,旨在帮助...

    黑马程序员_使用oc写了个命令行21点小游戏

    【标题】"黑马程序员_使用oc写了个命令行21点小游戏" 描述了一款使用Objective-C编程语言开发的命令行版21点游戏。在iOS和Mac OS X开发中,Objective-C是一种广泛使用的编程语言,它基于C语言并加入了Smalltalk的...

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

    1. **面向对象编程(OOP)**:Java是一门面向对象的语言,第8天的课程可能会重点讲解OOP的四大特性——封装、继承、多态和抽象。封装是隐藏对象的属性和实现细节,仅对外提供公共访问方式;继承允许一个类(子类)...

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

    4. HQL与 Criteria查询:Hibernate提供了不同于SQL的查询语言HQL(Hibernate Query Language),使得查询更加面向对象。同时,Criteria API提供了一种动态构建查询的方式,无需书写字符串,更易避免SQL注入。 5. ...

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

    根据提供的文件信息,我们可以推断出这是一套由知名IT教育机构“黑马程序员”出品、由讲师毕向东主讲的Java基础教学视频。由于实际视频内容无法直接获取,本篇将依据标题、描述以及部分标签内容,综合分析并展开相关...

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

    在"黑马程序员_Java基础辅导班教程课件[第01期]第5天"中,我们主要聚焦于Java编程语言的基础知识。这是一份专为初学者设计的教学资源,旨在帮助学员扎实地掌握Java编程的基本概念和技能。第5天的课程可能涵盖了变量...

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

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

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

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

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

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

    C++黑马程序员学习资料

    C++黑马程序员学习资料,附赠《InterviewGuide第四版By阿秀》、《LeetCode刷题手册》、《背包问题九讲》、《算法图解》pdf版本,三个基础课程文档手册及三个实验项目,由简到繁分别为《通讯录管理系统》、《职工管理...

Global site tag (gtag.js) - Google Analytics