黑马程序员_java面向对象
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、面向对象
相对于面向过程来说,java是面向对象的。面向过程,是强调的功能行为;面向对象,实际是将功能进行封装,就是把我们需要的功能装在一个盒子里,当需要这个功能的时候,只需要把这个盒子拿过来,让盒子自己进行运行这个功能,而对象就是具有这个功能的盒子。
宏观上来说,就是万物都是对象,微观上来说就是一个具有一定功能的实体或者虚体,想冰箱,电视,甚至人,都具有一定的功能和技能,我们不必知道他们具体功能是怎么实现的,只需要知道他们有什么功能,让他们做可以了。举例来说,就是我会一些东西,比如会用办公软件,会编程,那么公司就会用我这些技能,而我就以那个对象,公司就是指挥调用的人。
面向对象的三个特征: 封装 继承 多态
开发其实就是找对象使用,没有对象,就创建一个对象。
找对象,建立对象,使用对象,维护对象。
二、类和对象的关系
按我自己的理解来说,类就是一张二维图纸或者是三维模拟图,对象就是根据这些图纸生产出来的具体实物,如果类是手机图纸,那么对象就是手机。这样来说,类就是描述对象的特征和属性的,对象就是一个具体的实体。
类:就是对显示生活事物的描述 在java中就是class定义的类
对象:就是这类事物,实实在在的个体 就是java中在堆内存中用new建立的实体
//类就是描述
class Car
{ 描述事物的属性和行为
具体java程序一般包括数据类型和函数
int num = 4;.................................................成员变量
void run()
{ System.out.println(num);}
}
成员变量和局部变量:
1)作用范围:
成员变量定义在类中,作用与整个类中
局部变量作用于函数汇总,或者语句中
2)内存中未知
成员变量:在堆内存中,因为对象的存在,才在内存中存在
局部变量:存在栈内存中
3)初始化
成员变量:系统默认初始化为0,即我们命名是可以不赋值,成员变量即可参加运算。
局部变量:必须编程时候我们给局部变量初始化,否则参与不了运算。
//建立对象用new来表示 具体格式为: 类名 名称 = new 类名();
内存管理和数组类型建立的时候相似,只是没有相应的角标。
要调用对象里的功能,java里格式为:对象.对象成员 。程序如下:
class CarDemo
{
public static void main(String[] args)
{
Car c = new Car();................................建立一个对象,c就是一个类类型变量,类类型变量指向对象
c.num = 8;.............................................调用对象里的功能
new Car() .num=9;...............................匿名调用对象
}
}
注意上面程序中的匿名对象的应用
new Car().num=5;
new Car().color='bule';
new Car().run();
这其实是三个匿名对象,彼此之间没有联系。匿名对象使用方式一、当对对象的方法(此处注意是方法)只调用一次时,可以用匿名对象来完成,这样写比较简化,如果对一个对象进行多个成员调用,必须给这个对象起个名字。二、使用方式二:可以将匿名对象作为实际参数进行传递。
三、对象三大特征之一:封装
1、封装概述
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
将变化隔离,便于使用,提高重用性,提高安全性。之前学习的函数就是最小的封装体。
2、封装,关键字 private
private 关键字 私有的意思 权限修饰符中的异类,用于修饰类中的成员(成员变量和成员函数)
将类中的成员变量和函数私有化后,类以外即使建立了对象也不能直接访问。
程序例子:
lass Person
{
private int age ;................................................此处age私有化了,只有在本类中有效
void speak()
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.age =20;......................................................................此时,对age访问就失效了
p.speak();
}
}
想要在访问被私有化的变量时,就要在本类中建立一个函数,可以调用被私有化的成员变量。
一个成员变量通常都会对应两个访问方式:一个设置,一个获取
可以在本来中加入以下程序:
public void setAge(int a )....................................用于设置成员变量的值
{
age=a;
}
public int getAge()................................................用于获取成员变量值
{
return age;
}
注意:私有仅仅是封装的一种表现形式。
之所以对外提供访问方式,就因为可以再访问方式中加入逻辑判断语句。对访问的数据进行操作,提高代码的健壮性。即可以在本类的方法中,加入判断或者其他语句,对类外访问数据进行控制。
3、构造函数
构造函数的名字与类名相同,而且这个函数不需要定义返回值类型,不可以写return语句。其作用是给对象进行初始化。
对象以建立的时候,就会调用与之对应的构造函数,就像一个物体的基本特性,只要对象产生,构造函数就会运行,起具体的作用就是给对象进行初始化。如果我们在编程的时候,没有定义构造函数,系统就会给与一个默认的空参数的构造函数Person( ){ } 。当我们在类中自定义了构造函数虎,默认的构造函数就没有了。
class Person
{
Person().......................................................此处就是构造函数
{
System.out.println("person run");
}
}
构造函数可以进行重载,即是在建立对象的时候,给不同的对象进行不同的初始化。一个类可以产生很多对象,可调用相对应的构造函数。就像如下程序:
Person()............................................构造函数Person()
{
System.out.println("A");
}
Person(String n) .....................................构造函数 Person(String n)
{
name = n;
System.out.println(name);
}
Person(String n,int a) ................................. 构造函数Person(String n,int a)
{
name = n;
age = a;
System.out.println(name+","+a);
}
此时就可看出一般函数和构造函数的不同:
构造函数在对象一建立的时候就会运行一次,给对象初始化
一般函数是对象调用才会执行,是给对象添加对象具备的功能。
一个对象建立,构造函数只运行一次。
而一般方法可以被该函数调用多次。
//构造代码块 { System.out.println("ABCD") }
构造代码块也是给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。相对于构造函数,构造代码块是给所有对象进行统一初始化,而构造函数是给想对应的对象进行初始化。所以,构造代码块是可以给不同对象的共性进行定义和初始化。
4、this关键字
Person(String name)
{
name = name;
}
这个程序中,name输出为null。就是说局部中定义两个name,都是局部变量,通俗来说就是局部变量现在局部找相对应的局部变量,没有的话,才会到本类中找成员变量。所以,此时就用关键字this区分成员变量和局部变量同名的情况。程序变为:
Person(String name)
{
this.name = name;...............加上个this关键字。
}
this 代表它所在函数所属对象的引用,就是说哪个对象调用this所在的函数,this就代表这个对象。
this的应用:当定义类中的功能是,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
注意构造函数间的调用只能用this 关键字
Person(String name)
{
this.name = name;
}
Person(String n,int a)
{
this(name);....这个函数间调用语句必须是在第一行,初始化先执行函数自己初始化,再执行自定义初始化
age = a;
System.out.println(name+","+a);
}
构造函数间不可以重复调用,就是你调用我,我调用你,否则相当于死循环。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
相关推荐
黑马程序员_毕向东_Java基础视频教程第05天-01-面向对象(概述).avi
1、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE(Java Runtime Environment,Java 运行时环境),它相当于操作系统部分,提供了 Java 程序运 行时所需要的基本条件和许多 Java ...
黑马程序员 - Java基础教学 - 05 - 面向对象(1).doc
传智播客_Java培训_毕向东_Java基础[03-面向对象]系黑马程序员_毕向东_Java基础视频教程
含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 Java是SUN(Stanford University Network,斯坦福大学网络...是简单易学,完全面向对象,安全可靠,与平台无关的编程语言
黑马程序员 - Java基础教学 - 06 - 面向对象(2) - 关于静态static的那些事.doc
在下载和比较了大量同类书籍后不得不承认孙卫琴老师的这本书循序渐进由浅入深是最好的Java入门教程,同时它的...本资源包含《Java面向对象编程》的电子书,实例源代码,课后题答案等可以说是当前该书最全的资源了。。。
第1章 Java开发入门一.填空题1. 面向对象,SUN 2. JavaSE,JavaEE,JavaME3.面向对象、跨平台性、支持多线程4. JDK5.bin
1、面向对象都有哪些特性以及你对这些特性的理解12 1、 Java 中实现多态的机制是什么 1、 Java 中异常分为哪些种类13 2、 调用下面的方法,得到的
精选12种与多线程和并发处理相关的设计模式 264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年! 本书适合以下读者阅读 a....b.对Java编程感兴趣的人 ...对面向对象开发感兴趣的人
观看黑马程序员Java零基础视频教学,从60P方法开始总结的知识集合,请使用Xmind打开,如果需要学习请配合视频打开:https://www.bilibili.com/video/BV17F411T7Ao
精选12种与多线程和并发...对面向对象开发感兴趣的人 【电子版来自互联网,仅供预览及学习交流使用,不可用于商业用途,如有版权问题,请联系删除,支持正版,喜欢的请购买正版书籍: https://item.jd.com/12165317.html】
(1)aop:面向切面编程,扩展功能不是修改源代码实现 (2)ioc:控制反转, - 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new...
提供《Java基础案例教程》-教学PPT,供开发者和初学者进行学习,Java是一种高级计算机语言,它是由SUN公司(已被Oracle公司收购)于1995年5月推出的一种可以编写跨平台应用软件、完全面向对象的程序设计语言。Java...
此资源包含了用户需求说明文档...利用Spring的依赖注入和面向切面特性,hibernate的数据持久化技术、Struts的控制器实现了楼栋管理模块,房间管理模块,业主管理模块,收费管理模块,物资设备管理,管理员管理等模块。
面向对象的基础核心知识点之一,是日后学习JavaEE,JavaME的必备知识;注重基础的代码实例讲解, 让你轻松的学习Java基础知识,为以后学习铺平道路,打好基础;万丈高楼平地起,希望能帮助你!
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...
7. 面向对象基础 8. 常用API 9. 综合项目实战 Java加强篇包括: 1. static、单例设计、继承 2. 权限修饰符、常量、枚举、抽象类 3. 多态、内部类、常用API 4. 日期与时间、日期类、包装类、正则表达式、Arrays 类、...