黑马程序员——面向对象初步
来源:互联网 发布:人像裁剪软件 编辑:程序博客网 时间:2024/06/15 19:27
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
1. 面向对象概念
早期的计算机编程是基于面向过程的,随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。面向对象,是将现实世界的事物抽象成对象,将现实世界中的关系抽象成类、继承。Wikipedia是这样定义的:
“Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which are data structures that contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods. A distinguishing feature of objects is that an object’s procedures can access and often modify the data fields of the object with which they are associated (objects have a notion of “this” or “self”). In OO programming, computer programs are designed by making them out of objects that interact with one another.”
面向过程的编程语言:C
面向对象的编程语言:Python, C++, Objective-C, Smalltalk, Delphi, Java, Swift, C#, Perl, Ruby and PHP.
面向对象的三大特征:封装(Encapsulation)、继承(Inheritance)、多态。(Polymorphism)。
2. 类与对象的关系
类是一组具有相同特性(属性)与行为(方法)的事物集合。对象是人们要研究的具体事物。”objects are instances of classes”. —— From Wiki
成员变量:
a.定义在类中,在整个类中都可以被访问;
b.随着对象的建立而建立,随着对象的消失而消失,存在于对象的堆内存中;
c.有默认初始化值。
局部变量:
a.只定义在局部范围内,如函数内、语句内等;
b.存在于栈内存中,作用的范围结束,变量空间会自动释放;
c.没有默认初始化值。
匿名对象: 没有被其他对象所引用,使用一次就变成垃圾,被垃圾回收系统回收。可以作为实际参数进行传递。
/* 描述小汽车。属性: 颜色,轮胎数; 行为:run 打印结果是: 4 black..10 black..10 6...yellow *///对Car这类食物进行描述class Car { //成员变量 static String color ="red"; int num = 4; //成员方法 public static void run() { //临时变量 int num = 10; //输出临时变量的值 System.out.println(color+".."+num); }}class CarDemo{ public static void main(String[] args) { //通过new关键字,建立对象 //c就是一个类类型的引用变量,指向了该类的对象 Car c = new Car(); //对对象的属性进行修改 c.color = "black"; //输出成员变量的默认值 System.out.println(c.num); //通过对象.成员的形式来使用对象的功能 c.run(); //使用匿名对象 new Car().run(); //匿名对象作为实际参数进行传递 show(new Car()); } private static void show(Car c) { c.num = 6; c.color = "yellow"; System.out.println(c.num+"..."+c.color); }}
在Java中,方法参数的传递永远都是传值,而这个值,对于基本数据类型,值就是你赋给变量的那个值。而对于引用数据类型,这个值是对象的引用,而不是这个对象本身。
3. 封装(Encapsulation)
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。这样不仅便于修改内部代码,而且提高了重用性和安全性。
封装的实现——private。将成员变量私有化,对外提供get和set方法。
4. 构造方法(Constructor)
作用:给对象初始化(new)。
特点:函数名与类名同;不写返回数据类型。
一个类中如果没有定义构造函数,系统会给一个默认的空参数构造函数(default constructor);如果有定义构造函数,则类中没有默认的构造函数。多个构造函数以重载的形式存在。
5. this关键字
this代表本类对象的引用。
两种用法:a.当成员变量和局部变量重名时,可用this区分。
b.构造函数间的调用。只能定义在构造函数第一行。
class Person{ private String name; private int age; //构造函数 Person(){ } Person(String name){ this.name = name; } Person(String name, int age){ this(name); // this用于在构造函数中调用其他构造函数,只能定义在构造函数的第一行。 this.age = age; } //成员变量name,age的set和get方法 public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(int age){ if (age >0 && age <130) this.age = age; else System.out.println("Wrong data"); } public int getAge(){ return age; } void speak(){ System.out.println(name+" is "+age+" years old"); }}class PersonDemo{ public static void main(String[] args){ Person p1 = new Person("Charley", 15); p1.speak(); Person p2 = new Person("Beth"); p2.speak(); Person p3 = new Person(); p3.speak(); p3.setAge(-1); }}
6. static关键字
static用于修饰成员。被修饰的成员具备以下特点:a.随着类的加载而加载;b.优先于对象存在;c.被所有对象所共享;d.可直接被类名调用。
注:a.静态方法只能访问静态成员,即静态方法只能处理本类中的static域或调用static方法;非静态方法静态和非静态都可访问;
b.静态方法中不能访问实例变量,不能使用this,super关键字,因为静态先于对象存在;
c.主函数是静态的。主函数解析:
public:权限必须是最大的,被jvm调用。
static:不需要对象调用,直接用主函数所属类名调用即可。命令行窗口中输入:java StaticDemo,实际上就是在执行StaticDemo.main();。
void:主函数不需要具体的返回值。
main:函数名,不是关键字,只是一个jvm识别的固定的名字。
String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。什么时候使用静态呢?
a.静态变量:不同对象具有相同的值时
b.静态函数:无需访问非静态成员时
静态代码块:给类初始化。随着类的加载而执行,且只执行一次。
格式:
static
{
静态代码块中的语句。
}
构造代码块:给所有对象初始化。
格式:
{
构造代码块中的语句。
}
7.类的API文档创建
现在网络上已经有了很不错的API文档生成工具,百度一下就出现了下面这篇,博主还木有用过,不知道效果如何,这里附上链接仅供大家参考一下。 http://www.csdn.net/article/2013-02-20/2814189-API_DOC_TOOLS
下面还是着重介绍一下如何手动创建类的API文档。
前提:该类必须是public的。
方法:
1)首先在我们的java类中加好注释,包括类的说明、@author、@version等,每个方法最好也写清楚方法实现的功能、@param、@return等等。
2)在dos命令行中输入命令:javadoc -d Myhelp -author-version 类名.java
8. 单例设计模式
设计模式(Design pattern)是一套可以反复使用的代码设计经验的总结。使用设计模式是为了提高代码的可读性、可维护性。
经典的23种模式
下面来详细说一说单例设计模式(Singleton pattern)。
单例设计模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供。
如何保证对象唯一性呢?
a.不允许其他程序用new创建该类对象。——> 私有化该类构造函数
b.在该类创建一个本类实例。——> 通过new在本类中创建一个本类对象。
c.对外提供一个方法让其他程序可以获取该对象。——> 定义一个公有的方法,将创建的对象返回。
单例设计模式的静态结构图:
下面程序演示了单例设计模式的两种类型:饿汉式和懒汉式。其中懒汉式较为常用。
/* 饿汉式:在程序启动或单例模式类被加载的时候,单例模式实例就已经被创建。 */class Singleton{ //通过new在本类中创建一个本类对象。 private static Singleton s = new Singleton(); //私有化该类构造函数。 private Singleton(){} //定义一个公有的方法,将创建的对象返回。 public static Singleton getInstance(){ return s; }}public class SingletonDemo { public static void main(String[] args){ Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2); }}
/*懒汉式:当程序第一次访问单例模式实例时才创建实例。*/ class Singleton{ private static Singleton s = null; //私有化该类构造函数。 private Singleton(){} //定义一个公有的方法,将创建的对象返回。 public static Singleton getInstance(){ //如果s为空,通过new在本类中创建一个本类对象。 if (s == null) s = new Singleton(); return s; }}public class SingletonDemo { public static void main(String[] args){ Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2); }}
- 黑马程序员——面向对象初步
- 黑马程序员————面向对象初步
- 黑马程序员-初步面向对象
- 黑马程序员_面向对象编程初步
- 黑马程序员_11_初步面向对象
- "黑马程序员"面向对象的初步了解
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员——面向对象1:理解面向对象
- 黑马程序员———-面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员——面向对象
- 黑马程序员——面向对象总结
- 黑马程序员——面向对象
- Nginx 学习
- 求两个字符串的最长公共子串(LCS)
- 重写equals()与hashcode()方法,及comparable接口的实现
- ajax同步与异步
- 《head first python》——理解数据:列表排序与集合
- 黑马程序员——面向对象初步
- 控制项目规模
- Python学习笔记1(小甲鱼)—— 安装Python3
- 关闭SQLite3中的journal暂存档
- OpenCV最常用
- 五大常用算法之二:动态规划算法
- C/C++编程Debug模式下变量在内存中的0xcccccccc、0xcdcdcdcd和0xfeeefeee三类初始化值
- HDU 5386 思维
- Linux下的bash配置文件