javase-面向对象

一.面向对象的基本特征

1.封装

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:将变化隔离;便于使用;提高重用性;安全性。

封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。

2.继承

javase-继承

3.多态

二.访问控制符

javase-面向对象_第1张图片

注:protected修饰的,在不同包中通过对象不能访问,但继承后能在子类中访问。

三.成员变量(属性)与局部变量

1.局部变量必须初始化,而没有初始化的成员变量则会自动赋一个默认值。

2.成员变量直接定义在类中。

   局部变量定义在方法中,参数上,语句中。

3.成员变量在这个类中有效。

局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。

4.成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。

局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。

四.构造方法

1.对象初始化时调用。

2.如果一个类中没有写构造方法,会有一个默认的无参构造方法,如果写上自定义的构造方法,默认的构造方法就不再起作用。

3.构造方法可重载,但不可重写,因为构造方法不可继承。

4.static不能修饰构造方法,因为构造方法是类创建对象时调用的,必须依赖于对象,而static则不依赖于对象。

5.final不能修饰构造方法,因为构造方法不能被继承,用final修饰方法的目的是不允许被重写,所以final修饰构造方法没有意义。

五.创建对象的过程

如:Cat c = new Cat();

1.创建对象的第一步在方法区中查找对象对应的类是否已经被加载,如果没有被加载,就加载这个类Cat.class,如果已经被加载了,就不在加载了。

2.方法区中加载不是类型的全部,而是在类型中有定义并且实现的方法。

3.加载完毕以后开始创建对象,对象在堆区,对象中会保存属性和方法的指针。

 

c.init("小张", 250, 250, 250, 520);

方法的调用过程

1.在Cat类型的定义中找到init方法的定义。找不到就报错。

2.找init方法的修饰符,看看能不能被调用,不能调用就报错。

3.从对象名保存的地址开始查找方法的指针,找到指针以后,从指针位置找到方法,并执行。

内存图:

javase-面向对象_第2张图片

六.this

1.this表示当前对象。

/*
    2015年12月24日13:00:42
    目的:this的用法。
*/
class A
{
    public int i;

    public A(int j)
    {
        i = j;
    }

    // public void show(A*this)  this代表当前正在调用show方法的对象。
    public void show()
    {
        //System.out.printf("i = %d\n", (*this).i);
        System.out.printf("i = %d\n", i);
    }
}

public class This_1
{
    public static void main(String[] args)
    {
	//aa1和aa2可以通过隐藏的指针this,共用同一个方法show
        A aa1 = new A(10);// aa1.show(aa1)
	A aa2 = new A(20);// aa2.show(aa2)

        aa1.show();
	aa2.show();
    }
}
/*
***************结果***************
i = 10
i = 20
*/

2.this()表示调用构造方法,但只能在构造方法中使用

你可能感兴趣的:(javase)