一、概述
java的核心思想:面向对象的编程
编程有两种思想,面向过程和面向对象,现在开发几乎全是面向对象,这不是说面向对象开发比面向过程更简单,其实面向对象开发的更复杂,那为什么还要用面向对象呢?
首先明白何为面向过程,何为面向对象。面向过程就是一切为实现功能为目标,实现完了就结束了,基本不考虑后期的维护难度。面向对象,更多的是考虑子模块的设计,每个功能模块都单独存在,要考虑重用性和可维护性,一切以结果为目标,忽略开发过程。
再简单的说:你在餐馆点餐,要份辣子鸡,你就是面向对象,只说目的。厨师做出辣子鸡就是面向过程。
在开发程序时,并不是说用面向对象后,就不用面向过程,这两个是同时存在的。当你将一个功能独立出来设计,随处调用的模块时,就是面向对象。当你在实现这个独立出来的功能时,就是面向过程的。
在面向对象设计开发时,就要去封装一个一个的功能模块,然后在每个需要的地方去调用,或者子类的继承,多态。所以我们学习面向过程就是学习如何去“抽象"出类,然后进行封装,然后使用。概括就是:封装、继承、多态,或者再加上一个抽象
我认为面向对象就像现在工业的模块化生产,像汽车,由各个零件的模型做出很多零件,再把一套成型的零件来组装一辆汽车。如果需要更改车型,只要改模型,就能生产出很多一样的零件。
具体解释:
封装:保护功能模块的功能不被破坏
继承:扩展原有的功能
多态:一个类的功能可以呈现多种不同的结果,一个打印机,既能打印黑白,也能打印彩色。
面向对象的开发过程:
面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)
二、类和对象
类和对象是整个面向对象的基本组成单元。
封装出来就是一个一个类,类是对现实世界上存在的东西的抽象形容。类里边有属性,有功能方法。
对象是对类的具体描述,描述出来一个独立的个体,每个对象都有自己的属性和行为(功能方法)。
类不能直接使用,对象可以直接使用。
例如:人是一个物种,是一个类。有名字,年龄,身高,性别等属性。也有吃饭,走路,睡觉这些行为。但是这不是一个具体的,只是一类描述,当我们要使用类的某个功能是,就要实例化一个对象,这个对象是实实在在的能干事的。比如老师对班里的学生说,唱一个歌,但是大家不知道具体谁唱,这时老师说,小明来唱首歌,这就具体到了一个实实在在的对象。
类的格式:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Person { String name; int age; int height; String sex; //这里全都是成员变量 public Person(){}; //构造方法 public void eat(){ //成员方法,也是具体实现各种功能的地方 System.out.println("eat"); } }
对象的创建:对象是用来存储一个具体描述事物的一串相关联的数据。
public static void main(String[] args) { // 使用new关键字创建对象 // 对象类型 对象名=new 类名(); Person person = new Person(); // 给对象属性赋值 person.name="小明"; person.age=18; person.height=180; person.sex="男"; // 调用成员方法 person.eat(); // 来调用各个属性的值 System.out.println("姓名:"+person.name); System.out.println("年龄:"+person.age); }
三、方法/函数的定义和使用
在程序设计中,常将一个功能模块写成函数,可以重复调用。
函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等
定义:
权限修饰符 [static] 返回值类型 方法名(参数列表){
代码块;
[ 返回值;]
}
实例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class CeShi(){ // 无参无返回值 void来修饰无返回值的方法 public void sum1(){ int a=2; int b=3; System.out.println(a+b); } // 无参有返回值 返回值类型修饰符的范围要大于等于return出来值得类型范围 public int sum2(){ int a=2; int b=4; return a+b; } // 有参无返回值 public void sum3(int a,int b){ System.out.println(a+b); } // 有参有返回值 public int sum4(int a, int b){ return a+b; } } //对方法进行调用 public class CeTest{ public static void main(String[] args) { CeShi ce = new CeShi(); // 无参无返回值 ce.sum1(); // 无参有返回值 int i = ce.sum2(); //有返回值的方法调用后可以用一个变量接收 System.out.println(i); // 有参无返回值 ce.sum3(1,3); // 有参有返回值 int i1 = ce.sum4(3, 8); System.out.println(i1); } }
使用:
方法的调用:对象名.方法名
属性的调用:对象名.属性名