一.面向对象程序设计的三大特性
封装性:
将一个对象的属性和行为封装成为一个整体,实现了信息隐蔽,实现了封装在同一对象中不同属性和方法不同级别的访问权限
继承性:
提高了软件开发效率
分为单继承和多继承:
单继承就是一个子类只有一个父类,多继承是一个子类可以有多个父类。
Java不支持多继承,但是通过接口来弥补了不支持多继承的缺点。
多态性:
允许程序中出现重名现象。
有两种形态:
方法重载:方法同名不同参数,调用同名的不同方法完成不同的功能
对象多态:子类对象可以与父类对象相互转换,使用不同的子类对象完成不同的功能
二.类
类定义:
类包含属性和方法
class class_name
{
成员变量;//属性
方法;
};
如:
class Person
{
private int age;
private char sex;
public void setAge(int pAge){age=pAge;}
public int getAge(){return age;}
public void setAge(char pSex){sex=pSex;}
public int getSex(){return sex;}
};
注意:java类中的属性必须封装,在访问时只能通过setter和getter进行访问。
三.对象
对象的两种定义方法:
1)类名对象名称=null; //声明对象
对象名称=new类名();//实例化对象,此时它的属性值都是取默认值
2)类名对象名称=new类名();
注:在java中,反是引用类型的变量都可以用类似上面的方法来定义
如:
Person jakey=null;
jakey=new Person();
或
Person jakey=new Person();
声明一个对象时,会为这个对象分配一块栈内存空间A,在一个对象没有被实例化时,这块内存空间A里值为null,对象被实例化之后,会为对象分配一块堆内存空间B,其中存放的是对
象属性,这时栈内存空间A里就存放的是一个指向这块堆内存空间B的地址,B空间的大小取决于对象的属性。
注:对象使用前一定要实例化
一个栈内存空间的变量只能指向一个堆内存空间,反过来,一个堆内存空间可以由多个栈内存空间的变量指向。Java中有垃圾回收机制GC,对于不用的内存空间,GC会自动回收。
四.构造方法
类对象是由类的构造方法来初始化的,每个类都至少有一个构造方法。如果我们不明确声明类的构造方法,那么在编译时会自动给类生成一个无参数、什么也不做的默认构造方法,实例化类对象时,会自动调用类的默认构造方法。如果我们定义了类的构造方法,那么在编译时就不会再生成默认构造方法。
构造方法也可以重载。
五.匿名对象
public static void main(String[] args)
{
new Person(38,”male”);//匿名对象
}
匿名对象不开辟栈空间,只有堆空间,且只使用一次,便由GC回收所分配的堆空间,主要用于其它类实例化对象的参数传递。
六.String
String是一种特殊的类。
它有两种实例化对象的方法:
1)直接用”=”赋值,实例化一个对象之后,如果再实例化其它等内容的对象,则不再分配新空间,这种方式实例化的对象,用==比较的结果为true.
2)new调用构造函数,与常规的类对象实例化一样。所以用==比较结果为false,用equals()比较结果为true。
比较:
==比较用new实例化的String对象的地址,比较用赋值运算符实例化的String对象的内容
equals()比较用new实例化的String对象的内容,区分大小写
equalsIgnoreCase()比较用new实例化的String对象的内容,不区分大小写
对象池
String字符串的内容一旦声明就不可改变
平时看到结果变了是假象,那是通过把地址断开-连接实现的,实际上字符串的内容并不变。
String常用函数
length:数组元素个数
length():String对象长度
七.引用传递及基本应用
引用传递就是把一个堆内存空间交由多个栈内存空间使用
在类中接受本类对象的实例,通过这个实例访问本类中的封装属性
一对一关系
八.this关键字
通过this调用本类中的属性
通过this调用本类中的构造函数
指明当前对象
九.Static关键字
如果想把一个属性给一个类的所有对象共有,就把它声明为static;如果一个类的方法想给这个类直接调用,就把它声明为static(这种方法称为类方法)。Static修饰是全局的或说是静态的,对于static属性是放在全局数据区,不论什么方法都是放在代码区。
非static方法可以调用static方法或属性,但static方法不可以调用非static方法或属性
静态代码块:由static声明的代码块,static代码块优先于主方法执行,在类中的static代码块优先二构造块执行,构造块优先构造方法执行,类中的static块只执行一次。如:
static{//static块
System.out.println(“static code block”);
}
class Demo
{
{//构造块
System.out.println(“construct code block”);
}
Demo(){}
};
十.构造方法私有化-----单例设计模式
十一.对象数组
对象数组必须先分配空间,在使用时必须先将其中的对象分别实例化
也分为动态实例化和静态实例化
静态实例化:
Person child[]={new Person(100,”male”),new Person(100,”female”)};
十二.内部类(Inner class)
内部类的访问权限(public、private)与外部类的成员变量和成员方法一样,内部类也可以方便的访问它所属外部类的私有属性
static定义内部类,成了外部类,它不可以访问非static的外部类属性
在外部类中访问内部类
在方法中也可以定义内部类,但是如果方法中的内部类想要访问方法的参数,则需要在方法参数前面加final。如:public void xx(final int a){ class ic{};};
十三.实例
单向链表的实现