Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
给你学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
每天更新学习笔记,大家一起学习!
不喜勿喷,谢谢!
面向对象思想概述
面向对象是基于面向过程的编程思想
面向对象思想特点
是一种更符合我们思想习惯的思想
可以将复杂的事情简单化
将我们从执行者变成了指挥者
角色发生了转换
面向对象是什么意思呢?
面向对象程序设计是将人们认识世界过程中普遍采用的思维方法应用到程序设计中。对象是现实世界中存在的事物,它们是有形的,如某个人、某种物品;也可以是无形的,如某项计划、某次商业交易。对象是构成现实世界的一个独立单位,人们对世界的认识,是从分析对象的特征入手的。
对象的特征分为静态特征和动态特征两种。静态的特征指对象的外观、性质、属性(如某个人具有名字、身高、体重等);动态的特征指对象具有的功能、行为(如人具有吃饭、睡觉、打人、偷税、漏税)等。客观事物是错综复杂的,但人们总是从某一目的出发,运用抽象分析的能力,从众多的特征中抽取最具代表性、最能反映对象本质的若干特征加以详细研究。
人们将对象的静态特征抽象为属性,用数据来描述,在Java语言中称之为变量;人们将对象的动态特征抽象为行为,用一组代码来表示,完成对数据的操作,在Java语言中称之为方法,。一个对象由一组属性和一组对属性进行操作的方法构成。
类
将具有相同属性及相同行为的一组对象称为类。广义地讲,具有共同性质的事物的集合就称为类。如:博拉图对人作如下定义:人是没有毛能直立行走的动物。在博拉图的定义中“人”是一个类,具有"没有毛、直立行走"等一些区别于其它事物的共同特征;而张三、李四、王五等一个个具体的人,是"人"这个类的一个个"对象"。如下图:
小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
类:class
类与对象的关系
在面向对象程序设计中,类是一个独立的单位,它有一个类名,其内部包括成员变量,用于描述对象的属性;还包括类的成员方法,用于描述对象的行为。在Java程序设计中,类被认为是一种抽象数据类型,这种数据类型,不但包括数据,还包括方法。这大大地扩充了数据类型的概念。
类是一个抽象的概念,要利用类的方式来解决问题,必须用类创建一个实例化的类对象,然后通过类对象去访问类的成员变量,去调用类的成员方法来实现程序的功能。这如同“汽车”本身是一个抽象的概念,只有使用了一辆具体的汽车,才能感受到汽车的功能。
一个类可创建多个类对象,它们具有相同的属性模式,但可以具有不同的属性值。Java程序为每一个类对象都开辟了内存空间,以便保存各自的属性值。对象与对象之间也可以相互联系和相互作用,我们把这种方式称为“消息”。 一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。
面向对象的程序设计有四个主要特征:抽象、封装、继承、多态。
抽象
类的定义中明确指出类是一组具有内部状态和运动规律对象的抽象,抽象是一种从一般的观点看待事物的方法,它要求我们集中于事物的本质特征(内部状态和运动规律),而非具体细节或具体实现。面向对象鼓励我们用抽象的观点来看待现实世界,也就是说,现实世界是一组抽象的对象——类组成的。
封装
封装是面向对象的方法所应遵循的一个重要原则。它有两个含义:一是指把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位(即对象)中。另一层含义指“信息隐蔽”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓;或只允许使用对象的功能,而尽可能隐蔽对象的功能实现细节。
封装机制在程序设计中表现为,把描述对象属性的变量及实现对象功能的方法合在一起,定义为一个程序单位,并保证外界不能任意更改其内部的属性值,也不能任意调动其内部的功能方法。
封装机制的另一个特点是,为封装在一个整体内的变量及方法规定了不同级别的“可见性”或访问权限。
继承
继承是面向对象方法中的重要概念,并且是提高软件开发效率的重要手段。首先拥有反映事物一般特性的类,然后在其基础上派生出反映特殊事物的类。如已有的汽车的类,该类中描述了汽车的普遍属性和行为,进一步再产生轿车的类,轿车的类是继承于汽车类,轿车类不但拥有汽车类的全部属性和行为,还增加轿车特有的属性和行为。
在Java程序设计中,已有的类可以是Java开发环境所提供的一批最基本的程序——类库。用户开发的程序类是继承这些已有的类。这样,现在类所描述过的属性及行为,即已定义的变量和方法,在继承产生的类中完全可以使用。被继承的类称为父类或超类,而经继承产生的类称为子类或派生类。根据继承机制,派生类继承了超类的所有成员,并相应地增加了自己的一些新的成员。
面向对象程序设计中的继承机制,大大增强了程序代码的可复用性,提高了软件的开发效率,降低了程序产生错误的可能性,也为程序的修改扩充提供了便利。
若一个子类只允许继承一个父类,称为单继承;若允许继承多个父类,称为多继承。目前许多面向对象程序设计语言不支持多继承。而Java语言通过接口(interface)的方式来弥补由于Java不支持多继承而带来的子类不能享用多个父类的成员的缺憾。
继承
多态
多态是面向对象设计语言的基本特征。仅仅是将数据和方法捆绑在一起,进行类的封装,使用一些简单的继承,还不能算是真正应用了面向对象的设计思想。多态性是面向对象的精髓。多态性可以简单地概括为“一个接口,多种方法”。
多态性是指同名的方法可在不同的类中具有不同的运动规律。在父类演绎为子类时,类的运动规律也同样可以演绎,演绎使子类的同名运动规律或运动形式更具体,甚至子类可以有不同于父类的运动规律或运动形式。不同的子类可以演绎出不同的运动规律。如动物都会吃,而羊和狼吃的方式和内容都不一样。如:警车鸣笛,普通人反应一般,逃犯听见会大惊失色。警车鸣笛(同一种行为),导致普通人和逃犯不同反应(多种形态)。再如,画出昆虫的图片,对蚂蚁和对蜘蛛这2种昆虫画出的是不同的图片。通常是指对于同一个消息、同一种调用,在不同的场合,不同的情况下,执行不同的行为。
Java语言中含有方法重载与成员覆盖两种形式的多态。
方法重载:也叫静态多态。在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。
成员覆盖:也叫动态多态。子类与父类允许具有相同的变量名称,但数据类型不同,允许具有相同的方法名称,但完成的功能不同。
多态的好处:
A:提高了代码的维护性(继承保证)
B:提高了代码的扩展性(由多态保证)
多态的弊端:
不能使用子类的特有功能。
类与对象
面向对象的编程思想力图使在计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能地一致,类(class)和对象(object)就是面向对象方法的核心概念。类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的个体,因而也称实例(Instance)。可以这么说:类是对象的抽象;对象是类的实例。如图5-3就是一个说明类与对象的典型范例:
类与对象的实例化说明
小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
上图中,汽车设计图就是“类”,由这个图纸设计出来的若干的汽车就是按照该类产生的“对象”。可见,类描述了对象的属性和对象的行为,类是对象的模板。对象是类的实例,是一个实实在在的个体,一个类可以对应多个对象。可见,如果将对象比作汽车,那么类就是汽车的设计图纸,所以面向对象程序设计的重点是类的设计,而不是对象的设计。
同一个类按同种方法产生出来的多个对象,其开始的状态都是一样的,但是修改其中一个对象的时候,其他的对象是不会受到影响的,比如改装第一辆汽车的时候,其他的汽车是不会受到影响的。
内部类和匿名类
1:形式参数和返回值的问题
(1)形式参数:
类名:需要该类的对象
抽象类名:需要该类的子类对象
接口名:需要该接口的实现类对象
(2)返回值类型:
类名:返回的是该类的对象
抽象类名:返回的是该类的子类对象
接口名:返回的是该接口的实现类的对象
(3)链式编程
对象.方法1().方法2().......方法n();
这种用法:其实在方法1()调用完毕后,应该一个对象;
方法2()调用完毕后,应该返回一个对象。
方法n()调用完毕后,可能是对象,也可以不是对象。
2:包
(1)其实就是文件夹
(2)作用:
A:区分同名的类
B:对类进行分类管理
a:按照功能分
b:按照模块分
(3)包的定义
package 包名;
多级包用.分开。
(4)注意事项:
A:package语句必须在文件中的第一条有效语句
B:在一个java文件中,只能有一个package
C:如果没有package,默认就是无包名
(5)带包的编译和运行
A:手动式
B:自动式(掌握)
javac -d . HelloWorld.java
3:导包
(1)我们多次使用一个带包的类,非常的麻烦,这个时候,Java就提供了一个关键字import。
(2)格式:
import 包名...类名;
另一种:
import 包名...*;(不建议)
(3)package,import,class的顺序
package > import > class
4:权限修饰符
(1)权限修饰符
本类同一个包下不同包下的子类不同包下的无关类
privateY
默认YY
protectedYYY
publicYYYY
(2)这四种权限修饰符在任意时刻只能出现一种。
public class Demo {}
5:常见的修饰符
(1)分类:
权限修饰符:private,默认,protected,public
状态修饰符:static,final
抽象修饰符:abstract
(2)常见的类及其组成的修饰
类:
默认,public,final,abstract
常用的:public
成员变量:
private,默认,protected,public,static,final
常用的:private
构造方法:
private,默认,protected,public
常用的:public
成员方法:
private,默认,protected,public,static,final,abstract
常用的:public
(3)另外比较常见的:
public static final int X = 10;
public static void show() {}
public final void show() {}
public abstract void show();
6:内部类
(1)把类定义在另一个类的内部,该类就被称为内部类。
举例:把类B定义在类A中,类B就被称为内部类。
(2)内部类的访问规则
A:可以直接访问外部类的成员,包括私有
B:外部类要想访问内部类成员,必须创建对象
(3)内部类的分类
A:成员内部类
B:局部内部类
(4)成员内部类
A:private 为了数据的安全性
B:static 为了访问的方便性
成员内部类不是静态的:
外部类名.内部类名 对象名 = new 外部类名.new 内部类名();
成员内部类是静态的:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
(5)局部内部类
A:局部内部类访问局部变量必须加final修饰。
B:为什么呢?
因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而改变量已经没有了。
为了让该值还存在,就加final修饰。
通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。
(7)匿名内部类
A:是局部内部类的简化形式
B:前提
存在一个类或者接口
C:格式:
new 类名或者接口名() {
重写方法;
}
D:本质:
其实是继承该类或者实现接口的子类匿名对象
(8)匿名内部类在开发中的使用
我们在开发的时候,会看到抽象类,或者接口作为参数。
而这个时候,我们知道实际需要的是一个子类对象。
如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式简化。
interface Person {
public abstract void study();
}
class PersonDemo {
public void method(Person p) {
p.study();
}
}
小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
class PersonTest {
public static void main(String[] args) {
PersonDemo pd = new PersonDemo();
pd.method(new Person() {
public void study() {
System.out.println("好好学习,天天向上");
}
});
}
}
这里提供的只是曾经学习整理的笔记,勿喷,谢谢,仅供java爱好者参考!
每日更新,请大家多多关注.谢谢!!!