面向对象理解
经过两个月的java学习,渐渐的对java这个东西有了一定的认识。它是一中面向对象的编程语言,怎么解释这句话呢?借网友一个比喻:
用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。
蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。
蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。
到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,
非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。
如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,
他可以组合出来任意多的组合,而且不会浪费。 盖浇饭的好处就是"菜""饭"分离,从而提高了制作盖浇饭的灵活性。
饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是"可维护性"比较好,"饭" 和"菜"的耦合度比较低。
蛋炒饭将"蛋""饭"搅和在一起,想换"蛋""饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。软件工程
追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之
一就是显著的改善了软件系统的可维护性。
类
类是java中一个基本的概念,至于什么是类呢?个人理解它为具有同一属性的一类东西的抽象称呼。例如鱼是一个类,但是鱼又可以分为好多种比如小鱼、大鱼……,如果用类和对象描述,鱼是类,而大鱼和小鱼都是具有特殊属性鱼,就是对象。进而可以说对象是类的实例化。至于类中的属性和对象中的属性的关系吗?对象中的属性是类的属性的子集,方法也是类的子集。类有内部类,匿名类,抽象类,接口,子类,父类。
数据类型
数据类型分为基本的数据类型(8种)和引用类型。引用类型的例子,例如自己定义了一个Student类,利用这个类产生一个Student的变量a,语法为:Student a=new Student();那么a 在这里就是一个引用类型的变量。概况的来说大多数引用类型的变量是自己定义的,像string这个引用类型的数据是java封装好的类型,直接可以拿来用。
方法(函数)
方法就是一个具有独立功能的代码组合。例如想要获得一个类里面的私有变量(age),那么就可以利用getAge()这个方法去获得age这个变量。方法与数据分不开,它是对数据的处理和加工。有些方法可以把数据保存的,进而实现数据持久化的功能。例如I/O流里面的write()和read()方法。就可将数据从程序中写到txt文档上或从文档上读到程序中。特殊的方法有toString(),equals(),hashCode();前面三个方法一般情况下需要重写。另外还有一个对属性值进行批量赋值的构造方法 。
集合
集合的概念就是一个容器,这个容器里面可以放各种各样的数据,如果想要指定放人的数据类型,可以利用泛型这个方法来实现,比如List<Student> stu = new ArrayList(); 则集合stu里面只能存student类型的数据了。集合最大的作用可以大批量的存放数据,这个存放不是持久性,意思是只要关机集合里面的数据就会从内存中消失 ,要想将集合中的数据变为持久性的数据,就需要利用 io流里面的读和写方法,或者利用jdbc和hibernate来实现数据的持久化。常用的集合有ArrayList<E>, LinkedList<E>, HashSet<E>, TreeSet<E> 。
修饰符
访问修饰符
名称 说明 备注
public 可以被任何类访问
protected 被同一包中的所有类访问被所有子类访问 子类没有在同一包中也可以访问
private 只能够被当前类的方法访问
default(无访问修饰符)可以被同一包中的所有类访问 如果子类没有在同一个包中,也不能访问
修饰符
名称 说明 备注
static 静态变量(又称为类变量)可以被类的所有实例共享 。 并不需要创建类的实例就可以访问静态变量
final常量 值只能够赋值一次,不能更改 可以同static一起使用,避免对类的每个实例维护一个拷贝