标签:
今年开始软考的时间有点晚了,从报了名之后软考算是正式开始了,放下了其他的东西,全面开始软考(中级)模式。
听Mr.mi和考过的人说,软考就是对过去几年学习的总结和复习,它是一个分水岭,过了这一关,那么今后的学习会有不一样的感受。
面向对象思想在刚开始学习VB6.0时候就接触过,只是它并不完全是面向对象程序语言,后来接触的C++、C#、设计模式等知识的时候才有一个大概的了解。软考里面设计模式使用的语言是java语言,以前没有接触过,但是它的基础知识和C和vb很像。所以之后有些知识点是在java语言基础上的。(J2SE)
概况
此处有一个面向对象的导图
面向过程:
以方法进行编程。完成功能都是以一个一个步骤拼接起来的。
面向对象:
比面向过程更加抽象,和复用性更好。它以一个对象为基本进行调用 。
1、对象、类
2、方法、属性
3、关系
面向组件
这是比对象更加的抽象(二进制级别)
面向服务其实和面向组件一样,它们还是利用面向对象的思想,只不过对对象进行了更深层次的抽象。
java中也是类和对象为单位,声明类,然后供其它的类调用。类和类之间的关系分为4种,分别是关联关系、继承关系、聚合/组合关系、实现关系。
关联关系 |
关系最弱,比如调用:一个类的方法,参数是另一个类的对象名 |
继承关系 |
可以读为XX是一种XX,比如小猫是一种动物。 |
整体和部分关系 |
有组合和聚合两种关系,前者是紧耦合关系,后者是松耦合关系 |
实现关系 |
接口和实现接口的类的关系 |
我们有面向对象的思想,就是为了在软件设计中应用这个思想,为我们节省时间、减少麻烦,使软件复用性强。
Public class TestStack{ Publc static void main(String[] args){<span style="font-family: Arial, Helvetica, sans-serif;"> </span> Test test =new Test(); int date 9; BirthDate d1=new BirthDate(1,1,2000); BirthDate d2=new BirthDate(7,7,1970); test.change1(date); test.change2(d1); test.change3(d2);<p style="margin:0in;font-family:SimSun;font-size:10.5pt" lang="en-US"> System.out.println("date="+date);</p><p style="margin:0in;font-family:SimSun;font-size:10.5pt" lang="en-US"> d1.display();</p><p style="margin:0in;font-family:SimSun;font-size:10.5pt" lang="en-US"> d2.display();</p> } Public void change1(int i){ i=1234; } Public void change2(BirthDate b){ b=new BirthDate(22,3,2015); } Public void change3(BirthDate b){ b.setday(22); } }
代码执行前在内存的状态:
执行后在内存中的状态:
在这个过程中,栈中产生过变量i、b;堆产生过b所指向的对象。
方法调用完毕以后,为这个方法分配的局部变量自动消失;
方法也会消失。这个方法指向的内存中的对象如果没有指针指向就会消失(垃圾回收)
在学习使用方法有几个特殊的关键字要学习,this关键字,super(),Static关键字,package中的jar包和关键字import。final关键字等。
1、this关键字
通过自身引用,this可以处理成员变量和参数重名的问题;和this 相对的有一个super方法:它指父类。
public class DemoThis{ private String name; private int age; DemoThis(String name,int age){ setName(name); //你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的 setAge(age); this.print(); br> } public void setName(String name){ this.name=name;//此处必须指明你要引用成员变量 } public void etAge(int age){ this.age=age; } public void print(){ System.out.println("Name="+name+" ge="+age); //在此行中并不需要用this,因为没有会导致混淆的东西 } public static void main(String[] args){ DemoThis dt=new DemoThis("Kevin","22"); 这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。 class Person{ public int c; private String name; private int age; protected void setName(String name){ this.name=name; } protected void setAge(int age){ this.age=age; } protected void print(){ System.out.println("Name="+name+" Age="+age); } } public class DemoSuper extends Person{ public void print(){ System.out.println("DemoSuper:"); super.print(); } public static void main(String[] args){ DemoSuper ds=new DemoSuper(); ds.setName("kevin"); ds.setAge(22); ds.print(); } }
2、static关键字
static声明的是静态成员变量,它在内存中被分配到data segment区中,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。
3、package和import
现在即使有类的一些命名规则,但是仍然会出现类名冲突的情况,使用包就可以解决这个问题。在安装文件加下jre/lib下有很多.jar文件,其中rt.jar中打包类很多我们需要用到的类。
以下是我们主要会用到的类:
Java.lang |
核心 |
String、Math、Integer、System、Thread,提供常用功能 |
Java.awt |
|
包含构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面 |
Java.applet |
不流行 |
小应用程序 |
Java.net |
|
与网络相关的操作的类 |
Java.io |
|
输入、输出功能的类 |
Java.util |
|
包含一些实用工具,如定义系统特性、实用与日期日历相关的函数 |
如果引用包里的文件,可以使用import
上面这种麻烦而且容易写错。
使用import java.io.*;//*号代表引用全部
总的来说:
a、将类放到包里,就要在源文件第一行加package
b、必须保证该类的class 文件位于正确目录下
该类的源码可能会产生影响,可以删除或移动
c、其他类访问jar包中的类
写全名:com.tgb.426.Xulingbo
引入import:
*具体类名
访问位于同一包中的类不需要引入。
d、Class文件父文件在Classpath下。
总结:这只是面向对象思想的一些特别基础的东西,熟练使用在以后的设计模式和程序设计会有很多的帮助。在面向对象的程序设计中,构造方法是我经常会混淆的概念,在接下来的学习过程中,深入体会吧!
标签:
原文地址:http://blog.csdn.net/mayfla/article/details/44755279