黑马程序员_java面向对象(一)

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

面向对象是一种相对于面向过程的编程思想,是对事物属性及功能进行描述,抽象提取封装的过程。面向对象是局域面向过程的,之前所学习的将功能提取写进方法里其实就是对过程的提取,而面向对象,是将方法封装进一个对象内,使其具有该功能,当需要使用该功能时直接调用具备该功能的对象,而不用具体指导内部的实现细节。

面向对象相对于面向过程简化了书写,提高了代码的复用性,使功能的实现逻辑变的简单。

面向对象
面向过程与面向对象的区别
面向过程强调的事功能行为
面向对象是将功能封装进对象,强调具备了功能的对象。
面向对象是局域面向过程的,之前所学习的将功能提取写进方法里其实就是对过程的提取,而面向对象,是将方法封装进一个对象内,使其具有该功能。

对象数量的确定;名词提炼法
人开门
class 人{
开门(门)
门.开
}
class 门{
开(轴带动开门)
}

面向对象的三大特征;封装,继承,多态
以后开发的过程基本是找对象,创建对象,使用对象,维护对象之间的关系。
类和对象的关系,
类就是对现实生活中事物的抽象描述,对象就是这些事物的实例,
映射到java中,描述就是class定义的类。具体的对象就是对应java中在堆内存中用new建立实体。类就像是汽车的设计图纸,生产出来的汽车就是对象,描述事物就是在描述事物的属性与行为。属性对应着类中的变量,行为对应着类中的函数方法,所以定义类就是在定义属性与行为,这些类中的成员,成员变量和成员方法。
对象的创建格式
类名 对象名=new 类名();类的实例化,此时在内存堆中产生一个对象实例,c是类类型变量,存在栈内存中指向对象,
对象成员的使用格式
对象.对象成员

从这里就可以看出只有一个主函数作为入口的原因,只要将其他对象的数据以类的形式进行封装,只需要在主函数进行调用就行。

成员变量与局部变量的区别
成员变量作用于整个类中,局部变量变量作用于函数中或者语句中。
在内存中两者的位置也不同,成员变量因为对象的存在而存在于堆内存中,局部变量存在与栈内存中。

匿名对象
匿名对象即是只是实例化对象但是并没有对其命名创建类类型变量,在栈内存中没有对堆内存中实体的引用关系,每次匿名对象语句执行完毕因为不再使用就对其进行不定时内存回收。
匿名对象的使用方式之一;当对象的方法只调用一次时,可以用匿名对象来完成,这样比较简化。当对对象的多个成员进行调用,必须给这个对象起个名字。
匿名对象的使用方式侄儿:可以将匿名对象作为实际参数进行传递。简化同时优化内存。

实参与形参,函数的调用时在栈内存中进行的,当一个函数结束时内存就会被回收。
public static void main(String[]args){
show(new car());
}
class Car{

}
public static void show(Car c){

}

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离。便于使用。提高复用性,提高安全性。
封装原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。
函数是代码中最小的功能单元即最小的封装体。

private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员方法)。私有只能在本类中得到访问。当需要访问时,需要设置访问的方法,一个私有的成员变量通常对应两个访问方法,set或者get。

private是封装隐藏中的最小权限。

构造函数
当分析事物时,该事物一存在就具备一些属性或行为时,需要在构造函数中定义。
对象一建立就会调用与之对应的构造函数,当一个类中没有定义构造函数时,那么系统会给该类默认加一个空参数的构造函数,用于对象的初始化,当在类中自定义了构造函数时,系统不会再进行添加了。当自定义的构造函数没有空参数构造函数时,是错的,必须要有空参的构造函数。
构造函数与一般函数的区别,构造函数是在对象一建立就自动调用,而一般方法则是需要对象调用时才执行,构造函数只运行一次,而一般函数可以被调用多次。
特点
1,函数名与类名相同
2,不用定义返回值类型
3,不可以写return语句
作用
可以用于给对象进行初始化。

构造代码块
作用类似于构造函数,但是执行顺序优先于构造函数,而且构造代码块是给所有对象进行统一初始化的,而构造函数只对对应参数的对象进行初始化。定义共性初始化。

this关键字
this关键字用于区分局部变量和成员变量同名的情况
person(String name){
this.name=name;
}
this代指本类当前对象的引用。即当前对象名,类类型变量。
类中成员的调用都是通过对象来完成的,所以根据内存图,根据代码逻辑发生的顺序可以更容易的理解。事实上在不用区分不同的时候,如果成员调用的时候钱面没写this一般都是省略了。
谁调用了该方法,this就代表谁。
在构造函数中的调用,一般函数是不能调用构造函数的。
this语句调用构造函数只能放在第一个语句的位置。
Person(){}
Person(String name){
this();//构造函数之间的调用只能用this关键字。
this.name=name;
}
Person(String name,int age){
this(name);//此处调用了上一个构造函数实现name的赋值,以简化代码。
this.age=age;//此处则只是普通的用法代指了当前对象的类类型变量。
}

static关键字;静态,用于修饰类中的成员,利用static修饰的成员内存就不在堆内存里了,而是提取出来放在内存的其他区域即方法区(共享区,数据区,用于存放类中的共享成员。),由对象所共享,以优化内存。
另外被static所修饰的成员不止可以被对象所调用也可以直接被类名所调用,格式类名.静态成员
所以static所修饰的成员应该是所有对象的共性。

静态static的特点
1,随着类的加载而加载
2,优先于对象存在
3,被所有对象所共享
4,可以直接被类名所调用

静态使用注意事项
1静态方法只能访问静态成员,非静态既可以访问静态成员也可以访问非静态
2静态方法中不可以定义this,super关键字,因为静态优先于对象存在。所以静态方法中不可以出现this,
3主函数是静态的。主函数的调用时一般通过类,或者对象调用而非直接调用的。主函数同类的成员访问只能访问静态的。
利:对对象的共享数据进行单独空间的存储,节省空间,没必要每一个对象中都存储一份。
弊端:生命周期过长,访问出现局限性。

main主函数
主函数是一个特殊的函数,作为程序的入口,可以被jvm调用
public,访问权限最高级
static,在内存中随着类的加载而加载,所以可以直接被调用
void,主函数没有具体的返回值
main,不是关键字,但是是一个特殊的单词,可以被jvm识别
参数,是一个字符串元素的数组
主函数的格式是固定的:JVM识别
public static void main(String[]args){
}
args是arguments的简写,这个变量名是可以随意的。只不过习惯的都写成这样的。JVM调用主函数时参数默认传入的是new String[0];长度为0的字符串数组。这个参数是可以改变的。

什么时候使用静态
定义静态变量;当所有对象存在共享数据时
定义静态函数;当方法内部没有访问非静态数据(即对象特有的数据)时可以定义成静态方法。即不需要使用到对象时

静态的应用
每一个应用程序都有共性的功能,可以将这些功能进行提取,独立封装,以便复用。

静态代码块
特点,随着类的加载而执行只执行一次,与构造代码块的区别也是执行优先级的区别,用于类的初始化。

时间: 2024-10-10 10:26:00

黑马程序员_java面向对象(一)的相关文章

黑马程序员_Java面向对象思想

面向对象要把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法 . 1.人在黑板上画圆 对于这个设计,上面有Person, Blackborad , Circle三个对象 动词 : 画 因为画的动作的数据:坐标(x,y),半径(randius) 是Circle拥有的数据,所以 draw()方法应该属于Circle对象,而不是动作的发出者Person. 注意:[动作发出者往往会委托动作承受者 ] 2.司机紧急刹车 对于这个设计,上面有Driver, Car两个对象 动词 : 刹车 因为刹

黑马程序员_Java面向对象

- - - - - android培训.java培训.期待与您交流! - - - - - - 对象 万物皆对象,任何功能都是通过对象来实现的,就是将功能封装进对象,让对象去调用这些功能. 这样对数据是一种优化,安全性更高,操作起数据来更方便. 特点 将复杂的事情简单化. 面向对象将以前的过程中的执行者,变成了指挥者. 过程和对象在我们的程序中是如何体现的呢?过程其实就是函数:对象是将函数等一些内容进行了封装. 匿名对象(参见匿名类) 当对方法只进行一次调用的时候,可以使用匿名对象. 当对象对成员

黑马程序员_java面向对象(二)

------- android培训.java培训.期待与您交流! ---------- 一.面向对象之继承是将多个类的共性提取出来单独进行描述,通过继承的方式来建立类与类之间的关系.子类继承父类中的所有成员.关键字extends.java语言只支持单继承,因为可能会带来安全隐患,造成代码冲突.但是支持多层继承,与多实现.继承:1,提高了代码的复用性2,让类与类之间产生了关系.有了这个关系才有了多态的特性.注意:千万不要为了获取其他类的功能,简化代码而继承.必须是类与类之间有所属关系才可以继承.继

黑马程序员_JAVA 基础加强学习笔记

一.面向对象 (一)继承  1.继承的好处: (1) 提高了代码的复用性. (2) 让类与类之间产生了关系,提供了另一个特征多态的前提. 注意: 子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();  如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数. 如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数. 2.final特点

黑马程序员_Java多线程

- - - - - android培训.java培训.期待与您交流! - - - - - - 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间.进程负责的是应用程序的空间的标示. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.线程负责的是应用程序的执行顺序. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序. 每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量. jvm在启动的时,首先有一个主线程,负责程序的执行,

黑马程序员_Java环境搭建及语言基础

- - - - android培训.java培训.期待与您交流!- - - - - - JRE和JDK JRE:Java Runtime Environment,java运行环境. JDK:Java Development Kit,java开发工具包. 使用JDK开发java程序,交给JRE运行. JDK下载和安装 http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK的目录结构 目录/文件名 功能说明   b

黑马程序员_Java异常 Java常用库类

Java异常 1,异常的基本概念 异常是导致程序中断运行的一种指令流,它是在运行时期发生的不正常的情况,在Java中,一切的异常都秉着面向对象的设计思想,所有的异常都是以对象和类的形式存在的. 2,异常类的继承结构 在整个Java的异常结构中,实际上有两个最常用的类,Exception和Error,这两个类分别是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try....catch处理 Error:一般之的是JVM的错误,程序中无法处理. 3,Java的

黑马程序员_Java抽象类和内部类

- - - - - android培训.java培训.期待与您交流! - - - - - - 类(class) 类是相似对象中共同属性和方法的集合体 在面向对象中定义类,就是在描述事物,就是在定义属性(变量)和行为(方法).属性和行为共同成为类中的成员(成员变量和成员方法). 封装.继承和多态 面向对象方法中软件设计的主体是类,类是相同属性和方法的封装体,因此类具有封装性 子类可以在继承父类所有属性和方法的基础上,再增加自己特有的属性和方法,因此类具有继承性 在一个类层次中,定义为根类的对象可被

黑马程序员_Java基础加强(下)

8.注解类 注解相当于一种标记,加了注解就等于打上了某种标记,没加就等于没打特殊标记,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记就去干什么事,标记可以加在包.类.字段.方法,方法的参数以及局部变量上. 注解的应用结构图: 为注解增加属性 定义基本类型的属性和应用属性 在注解类中增加String color(); @MyAnnotation(color = "red") 用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法 MyAnno