1、面向过程 通常是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,最后一个一个依次调用方法来解决。 面向过程考虑的问题是程序运行的流程,主要是程序的算法,而数据只是在必要的时候插入到算法中间。
2、面向对象 把构成问题域的事务分解成各个对象,给对象赋予相应的属性和行为,通过多个对象的相互协调来解决问题。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为 。 面向对象是用计算机去描绘现实的世界,以人文本,更多用于做应用层的软件开发。
从面向过程到面向对象,不仅仅是编程方式的改变,更重要的是思考方式的改变。
3、类:对一组具有相同属性和行为的对象的抽象。
4、面向对象的三大特征: (1)继承 继承是为了实现资源的共享,继承可以共享数据,重用代码。
(2)封装 封装能对私有的东西进行封装,确保数据的安全性。
(3)多态 多态是事物的多种形态。 继承之后重新改造,以实现更好的功能。
5、类中的代码分为: (1)属性/成员属性 :变量定义
(2)方法/行为 :具体的执行代码块。
6、同一个文件可以写多个类,但必须只有一个public类。
7、创建对象 类名 对象名=new 构造器(构造函数) 例:Employee zhangsan=new Employee();
//创建对象是Java虚拟机自动生成的默认构造函数 Employee() {
} 如果新建自己的构造函数时,默认的构造函数就会被覆盖掉, 想让默认的构造函数不被覆盖掉,可以先写出默认的构造函数(没有任何的属性和方法,只有方法名和空的方法体),然后才自定义自己的新的构造函数(自定义的属性和方法)。 //先写出默认的构造函数(没有任何的属性和方法,只有方法名和空的方法体) Employee() {
}
//自定义自己的新的构造函数(自定义的属性和方法) Employee(String name,int age) { name=new name; age=new age; void say { System.out.println(“我的名字是:”+name+”年龄是:”+age); }
} //创建对象时直接实例化 Employee p=new Employee(“张三”,1);
8、面向对象的编程过程 (1)定义好类和方法(属性和行为) 属性:变量的定义 行为:方法,干什么事 构造函数:默认构造函数、自定义构造函数 (2)创建对象/创建对象直接赋值 类名 对象名=new 构造器; 类名 对象名=new 构造器(“*”,**); (3)给对象赋值 对象.属性=值 “.”:成员运算符
9、创建对象时构造函数 (1)构造函数名称和类名相同 (2)构造函数用来创建对象,在对象创建时才被调用 (3)在创建对象时已经分配了内存,方法是没有分配内存空间的。 (4)每创建一个对象都是新的、跟之前不一样的对象,但是内容可能完全相同。
10、匿名对象 创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫匿名对象 (1)Person p1 = new Person(); p1.sayHello(); P1:句柄(新建对象名称) new Person():对象,实例
(2)new Person(“小张”,20).sayHello(); 执行完这句语句之后,对象就会变成垃圾,被回收,内存会得到回收。
11、this关键字 this:代表当前对象;是一个引用;指向调用该方法的当前对象。
(1)用this关键字的情况 方法中的变量与成员变量重名 ; 在一个构造器中,调用其它重载的构造器 ; 返回当前对象的引用 。
为什么要this 当类的变量名与改造函数参数的名称和改造函数变量的名称相同时,无法对类的变量进行正常的赋值,在对象实例化是只把值付给了构造函数,输出时只是输出了类的默认值而不是对象实例化的值。
出现问题的原因:当全局变量与局部变量名称相同时,程序会先访问局部变量,遵循的是“就近原则”。
解决方法:在构造函数的变量前加上this,让构造函数的变量指向的是当前的构造函数,而不是类。
例子:
//定义一个people类,属性有name和age public class People { String name; int age;
public void say() { System.out.println("我的名字是:"+name+" 我的年龄是:"+age); }//定义一个构造函数people(),属性有name和age public People(String name,int age) { name=name; age=age;
} public static void main(String[] args) { //创建对象并实例化 People p=new People("小林",20); p.say(); }} 未加this之前的源代码和程序运行结果
加this后的源代码和程序运行结果