java基础学习 -- 面向对象

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------

          在以后的java工作中,面向对象的思想是我们必不可少的,因为有了思想,写起代码才会显得得心应手,思想本身已经超越了java代码的编写,没有一定境界的思想,是编写不出来相应的代码的,下面,我就总结总结我的面向对象的理解。

*理解面向对象

      一、面向过程和面向对象的异同:
              相同:面向对象和面向过程都是一种思想;
              不同:面向过程强调的是功能的行为,面向对象是将功能封装进对象,强调剧本了功能的对象。

      二、面向对象的特点:
           1,更加的符合现代人的思考和生活方式。
           2,如果说面向过程是一种思维的话,那么面向对象将是一种思想。
           3,面向对象可以将原本复杂的问题变得简单化,使问题的解决思路更加的清晰。
           4,我们的角色因面向过程到者面向对象的转变而转变,在面向过程中,我们是角色的执行者,在面向对象中,我们转变到了对象的指挥者,我们只需要指挥对象做事情即可。
           5,面向对象的思维使得代码体现了”高内聚,低耦合“的特点,让代码变得具备更深的层次,但是降低了对象与对象之间的关联,使得代码无论设计还是运用都更加的灵活。

      三、面向过程和面向对象的相互联系:
            面向对象是基于面向过程的,是将面向过程的思想进一步的升华所得到的更深层次的思想。

      四、举例说明面向过程和面向对象的区别(人开关灯):
           面向过程:
                 人打开灯 --> 灯变亮 --> 人关闭灯 --> 灯变暗;
           面向对象:
                  人(对象一):具备开灯,关灯的动作(并非功能)。
                  灯(对象二):具备开灯,关灯的功能,变亮,变量的功能。
           由此看来,思想需要转变,人开灯,主要的方法需要定义在灯这个对象中,人只是简单的动作并非开灯的功能。

      五、面向对象的三大特征:
            封装(encapsulation)继承(inheritance)多态(polymorphism)

      日后开发中,我们所要做的工作就是  找对象,建立对象,使用对象,维护对象之间的关系。
      《thinking in java》一书中提到“万物皆对象”的思想值得我们去研究学习。

*类与对象

一、类与对象的基本区别
             类就是对现实生活中事物的描述。
             对象就是这类事物,实实在在存在的个体。
             映射到java语言中,描述就是class定义的类,具体的对象就是java在堆内存中建立的实体。

            如通过图纸生产汽车一例中,类就是图纸,汽车就是堆内存中的对象。
            描述事物其实就是在描述事物的属性和行为,对象的特点就是封装数据。
//需求:描述汽车
//属性对应是类中变量,行为对应的是类中的方法。属性和行为共同成为类中的成员(成员变量和成员方法)。
class Car{
	//描述颜色
	String color ="红色";
	//描述轮胎数
	int num = 4;
	
	//运行行为
	void run(){
		System.out.println(color+"..."+num);
	}
}

二、类中的成员变量和局部变量
作用范围:
成员变量作用于整个类中,局部变量作用于函数中,或者语句中。
在内存中的位置:
成员变量在堆内存中,因为对象的存在,才在内存中存在; 局部变量存在于栈内存中。

三、匿名对象的应用
匿名对象是对象的简化形式(例:new car().run())
匿名对象两种使用方式
1,当对对象方法仅进行一次调用时,可以使用匿名对象来完成,这样写比较简化。
2,匿名对象可以作为实际参数进行传递。
需要注意的是,匿名对象调用属性是无任何意义的。

四、对象的封装
封装的定义:
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的好处:
将变化隔离,便于使用,提高重用性,提高安全性。
封装原则:
1,将不需要对外提供的内容都隐藏起来;
2,把属性都隐藏,提供公共方法对其访问。
private修饰符:
私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效。
需要注意的是:将某些属性封装起来后,类以外即使建立了对象也不能直接访问或修改,如果需要访问就应该在本类中提供相对应的访问和修改方法。即我们常用的set,get方法。
为什么要提供访问方式:
之所以提供访问方式,是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码健壮性。
注意:私有仅仅是封装的一种表现形式!

*格式及关键字

一、构造函数和构造代码块
构造函数特点:
1,函数名与类名相同;
2,不用定义返回值类型;
3,不可以写return语句。
构造函数的作用:
对象已建立就会调用与之对应的构造函数,所以构造函数可以用于给对象进行初始化。
构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给类加入一个空参的构造函数;当在类中自定义了构造函数后,默认的构造函数就没有了(系统不会默认添加空参构造函数)。
构造函数和一般函数的区别:
构造函数实在对象一建立就运行,给对象初始化,而一般方法是对象调用才执行,是给对象添加具备的功能。一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次。
什么时候定义构造函数:
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
构造代码块作用:
给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。
构造函数和构造代码块的区别:
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。

二、this关键字
this的作用:
是用于区分局部变量和成员变量同名情况。
this的特点:
this代表本类的对象,深层次的讲,this代表它所在函数所属对象的引用。简单的说,哪个对象在调用this所在的函数,this就代表哪个对象。
this的应用:
当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用了本类对象,都用this表示。
this语句:
用于构造函数之间相互调用。
this语句只能定义在构造函数的第一行,因为初始化要先执行。

三、static关键字
static的用法:
是一个修饰符,用于修饰成员(成员变量和成员函数)
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以被类名调用。类名.静态成员。
static的特点:
1,随着类的加载而加载,也就是说,静态会随着类的消失而消失,说明它的生命周期最长
2,优先于对象存在,明确一点:静态时现存在,对象是后存在的;
3,被所有对象所共享;
4,可以直接被类名调用。
实例变量和类变量的区别:
1,存放位置:
类变量随着类的加载而存在于方法区中,实例变量随着对象的建立而存在于堆内存中。
2,声明周期:
类变量声明周期最长,随着类的消失而消失,实例变量生命周期随着对象的消失而消失。
static使用注意事项:
1,静态方法只能访问静态成员,非静态方法既可访问静态,也可以访问非静态;
2,静态方法中不可以写this,super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this;
3,主函数是静态的。
class Person{

	String name;//成员变量,实例变量
	static String country = "CN";//静态的成员变量,类变量
	public static void show(){
		System.out.println("---"+name);//本行编译时会报错,错误提示为无法从静态上下文中引用非静态变量name
                                               //由此可分析出静态方法只能访问静态成员。
	}
}
静态的利弊:
利:对对象的共享数据进行单独空间的储存,节省空间,没有必要每一个对象中都储存一份,可以直接被类名调用。
弊:声明周期过长;访问出现局限性(只能访问静态)。
静态什么时候使用:
要从两方面下手,因为静态修饰的内容有成员变量和函数,什么时候定义静态变量呢?当对象中出现共享数据时,该数据被静态所修饰,对象中的特有数据要定义成非静态存在于堆内存中。
静态函数什么时候使用:
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
静态的应用:每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。
静态代码块:
格式:
static{
静态代码块中的执行语句。
}
特点:随着类的加载而执行,只执行一次。
用于给类进行初始化的。

四、main函数
main函数简介:
主函数是一个特殊的函数,作为程序的入口,可以被jvm调用。
main函数的定义:
public: 代表着该函数访问权限是最大的。
static:代表着主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:非关键字,但是是一个特殊的单词,可以被jvm识别。
函数的参数:(String[ ] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串。字符串类型的数组。
主函数是固定格式的:jvm识别。


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------

你可能感兴趣的:(java基础学习笔记)