Java面向对象-上
Java类及类的成员
包括:属性、方法、构造器;代码块、内部类
面向过程(POP)与面向对象(OOP)
面向过程强调过程以函数为最小单位,强调怎么做
面向对象将功能封装进对象强调具备了功能的对象,以类和对象为最小单位,考虑谁来做。
属性和方法
属性(field):类中的成员变量。方法(function):操作变量的函数
//类的定义
class Person {
//属性
String name;
int age =1 ;
boolean isMale;
//方法
public void eat(){
System.out.println("Person can eat");
}
public void sleep(){
System.out.println("Person can sleep");
}
}
//类的实例化,创建对象
public class PersonTest{
public static void main(String[] args){
Person p1=new Person();//实例化对象
p1.eat();//调用对象的方法
p1.name="Tom";//调用对象的属性
Person p2= p1;//将p1对象的地址值复制给p3
}
}
对象的内存解析
堆存放对象,栈存放局部变量
类中方法的声明和使用
方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体
}
权限修饰符 privare,public,protected,缺省。
对象数组内存结构解析
匿名对象
创建的对象没赋给一个变量名,ji为匿名对象,一次性使用。一般用于传参。
new Phone().sendEmail();//直接调用不用复制给一个对象
方法的重载
一个类中允许存在同名的方法只需要参数个数或者类型不同即可。和方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系例如
int add(int x,int y){return x+y;}
int add(int x,int y,int z){return x+y+z;}
double add(double x,double y){return x+y;}
可变个数的形参
JavaSE 5.0提供了可变个数的形参Varargs(variable number of arguments)机制,允许直接定义能和多个实参相匹配的形参,从而用一种更简单的方式,来传递个数可变的实参。可变形参放最后一个。
引用数据类型
值传递,无法交换m和n
int m=10; n=20;
public void swap(int m,int n){
int temp=m;
m=n;
n=temp;
}
引用传递可以交换,因为用一个对象对一个新的对象的赋值,是地址传递而不是值传递。
class Data{
int m;
int n;
}
Data data=new Data();
data.m=10; data.=20;
public void swap(Data data){
int temp=data.m;
data.m=data.n;
data.n=temp;
}
面向对象的三大特征
三大特征:封装性(Encapsulation)、继承性(Inheritance)、多态性(Polymorphism),(抽象性)
封装与隐藏
隐藏对象内部的复杂性,只对外公开简单接口。提高系统的可扩展性、可维护性。
四种修饰权限
封装性的体现需要权限修饰符来配合。Java规定四种权限从小到大排列:private,缺省,protected,public。不同的对象对于一个类的访问权限如下图所示。
四种权限修饰符可以修饰类以及类的内部结构:属性,方法,构造器,内部类。
修饰类只能使用: 缺省,public。
构造器
构造器、构造方法、构造函数都是一个意思。
构造器的作用:创建对象。例如 Person p= new Person(); new后面的Person() 为构造函数,与类名相同。如果没有显示定义构造函数,系统会给默认构造函数,没有参数,一旦定义了类的构造器,系统不再提供默认构造器。和C++不同的是,Java有垃圾收集机制,所以不需要定义析构函数。
构造函数可以重载。
JavaBean
JavaBean是一种符合标准的Java类。通常每个需要使用的数据类型都是一个JavaBean。
UML类图
banking是包名,Account是类名。
其他关键字
关键字:this、super、static、final、abstract、interface、package、import等。
this的使用
this 表示当前对象,就近取当前对象的内容。在类的方法种,我们使用“this.属性”或者“this.方法”的方式,调用当前对象的属性或者方法。但是通常情况下可以省略this,特殊情况下,如果方法的形参和类的属性同名,我们必须使用"this.属性"来表明次变量是属性,而非形参。
class Person{
private String name;
private int age;
public void setName(String name){
this.name=name;//该对象的name属性等于参数name
}
}
this调用构造器,在类的构造器中,可以显示的使用“this(形参)”方式,调用本类中指定的其他构造器。构造器不能通过this调用自己。也不能互调形成循环。一次只能用this调一个构造器。
class Person{
private String name;
private int age;
public Person(){//构造器1
this.eat();
}
public Person(String name){
this();//调用构造器1来帮助初始化
this.name=name;
}
}
package的使用
1.为了更好的实现项目类中的管理,提供包的概念。
2.使用包就放在java源文件的首行。
3.包,属于标识符,遵循标识符命名规则,规范(xxxyyyzzz)。
4.每“.”一次就代表一次文件目录。
5.同名包下不能定义同名的接口和类。不同包下可以。
MVC设计模式
import的使用
用于导入指导包下的类。声明在包和类之间,需要导入多个结构则并列写入。可以使用“xxx.*”的方式,表示导入xxx包下所有的结构。默认已经导入了java.lang内的结构如String或者System则可以不导入。如果类重名,则需要在类前面写全,包的路径,包的全名。import static可以导入类和接口中的静态结构。