面向对象与面向过程
- 面向对象的三大特征
- 封装 (Encapsulation)
- 继承 (Inheritance)
- 多态 (Polymorphism)
java语言的基本元素:类和对象
- 类(class)和对象(object)是面向对象的核心概念。
- 类是对一类事物描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
- “万事万物皆对象”
类的成员之一:属 性
- 在方法体外,类体内声明的变量称为成员变量。
- 在方法体内部声明的变量称为局部变量。
- 注意:二者在初始化值方面的异同:
同:都有生命周期
异:局部变量除形参外,需显式初始化
所有变量:
- 成员变量:实例变量(不以static修饰)/类变量(以static修饰
- 局部变量:形参(方法签名中定义的变量)/方法局部变量(在方法内定义)/代码块局部变量(在代码块内定义)
成员变量(属性)和局部变量的区别?
成员变量:
- 成员变量定义在类中,在整个类中都可以被访问。
- 成员变量分为类成员变量和实例成员变量,实例变量存在于对象所在的堆内存中。
- 成员变量有默认初始化值。
- 成员变量的权限修饰符可以根据需要,选择任意一个
局部变量:
- 局部变量只定义在局部范围内,如:方法内,代码块内等。
- 局部变量存在于栈内存中。
- 作用的范围结束,变量空间会自动释放。
- 局部变量没有默认初始化值,每次必须显式初始化。
- 局部变量声明时不指定权限修饰符
。
类的成员之二:方 法
什么是方法(函数)?
方法是类或对象行为特征的抽象,也称为函数。
Java里的方法不能独立存在,所有的方法必须定义在类里。
对象的创建和使用
类的访问机制:
在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过。)
在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员
方法的重载(overload)
重载的概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载的特点:与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
可变个数的形参 1
2
3
4//下面采用数组形参来定义方法
public static void test(int a ,String[] books);
//以可变个数形参来定义方法
public static void test(int a ,String…books);
1.可变参数:方法参数部分指定类型的参数个数是可变多个
2.声明方式:方法名(参数的类型名…参数名)
3.可变参数方法的使用与方法参数部分使用数组是一致的
4.方法的参数部分有可变形参,需要放在形参声明的最后
Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
面向对象特征之一:封装和隐藏
使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。
Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
- 隐藏一个类中不需要对外提供的实现细节;
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
- 便于修改,增强代码的可维护性
类的成员之三:构造器(构造方法)
构造器的特征
- 它具有与类相同的名称
- 它不声明返回值类型。(与声明为void不同)
- 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
根据参数不同,构造器可以分为如下两类:
隐式无参构造器(系统默认提供)
显式定义一个或多个构造器(无参、有参)
注 意:
- Java语言中,每个类都至少有一个构造器
- 默认构造器的修饰符与所属类的修饰符一致
- 一旦显式定义了构造器,则系统不再提供默认构造器
- 一个类可以创建多个重载的构造器
- 父类的构造器不可被子类继承
几个关键字:this、package、import
this
- 在java中,this关键字比较难理解,它的作用和其词义很接近。
- 它在方法内部使用,即这个方法所属对象的引用;
- 它在构造器内部使用,表示该构造器正在初始化的对象。
- this表示当前对象,可以调用类的属性、方法和构造器
- 什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用this。
注意:
1.使用this()必须放在构造器的首行!
2.使用this调用本类中其他的构造器,保证至少有一个构造器是不用this的。
关键字—package
package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:
package 顶层包名.子包名 ;1
2
3
4
5
6
7pack\Test.java
package p1; //指定类Test属于包p1
public class Test{
public void display(){
System.out.println("in method display()");
}
}包对应于文件系统的目录,package语句中,用 “.” 来指明包(目录)的层次;
- 包通常用小写单词,类名首字母通常大写。
关键字—import
- 为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。
- 语法格式:
import 包名[.子包名…]. <类名 |*> - 应用举例:
1
2
3
4
5
6
7import p1.Test; //import p1.*;表示引入p1包中的所有类
public class TestPackage{
public static void main(String args[]){
Test t = new Test(); //Test类在p1包中定义
t.display();
}
}
注意:
- 若引入的包为:java.lang,则编译器默认可获取此包下的类,不需要再显示声明。
- import语句出现在package语句之后、类定义之前
- 一个源文件中可包含多个import语句
- 可以使用import lee. ;语句,表明导入lee包下的所有类。而lee包下sub子包内的类则不会被导入。import lee.sub.;
- import语句不是必需的,可坚持在类里使用其它类的全名
- JDK 1.5加入import static语句
JavaBean是一种Java语言写成的可重用组件。
- 所谓javaBean,是指符合如下标准的Java类:
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,且有对应的get、set方法
- 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使*用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变