关闭

疯狂JAVA讲义学习笔记4——面向对象1

标签: java面向对象函数对象指针
233人阅读 评论(0) 收藏 举报
分类:

定义类

[修饰符] class 类名
{
零到多个构造器定义..
零到多个Field…
零到多个方法…
}

修饰符

  • public
  • protected
  • private
  • static
  • final
  • abstract
    abstract和final最多只能出现其中之一,可以与static组合起来修饰方法

构造函数

与类名同名的函数,不带返回类型。

对象、引用和指针

public class Person
{
    public String name;
    public int age;
    public void say(String content){
       System.out.println(content);
    }
}
Person p;     //p变量,放在栈内存里
p=new Person();   //Person对象放在堆内存里

类也是一种引用数据类型,因此程序中定义的Person类型的变量实际上是一个引用,它被存放在栈内存里,指向实际的Person对象,而真正的Person对象则存放在堆(heap)内存中。

栈内存里的引用变量并未真正存储对象的Field数据,对象的Field数据实际存放在堆内存里。

当一个对象被创建成功以后,这个对象将保存在堆内存中,Java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。不管是数组还是对象,都只能通过引用来访问它们。

堆内存里的对象可以有多个引用,即多个引用变量指向同一个对象。如接上面的程序:

Person p2=p;

如果堆内存里的对象没有任何变量指向该对象,那程序将无法再访问该对象,这个对象就变成了垃圾,Java的垃圾回收机制将回收该对象,释放该对象所占的内存区。
因此,如果希望通知垃圾回收机制回收某个对象,只需切断该对象的所有引用变量和它之间的关系即可,也就是把这些引用变量赋值为null。

对象的this引用

this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认引用有两种情形:
- 构造器中引用该构造器正在初始化的对象
- 在方法中引用调用该方法的对象
this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或Field。
在static修饰的方法里不能使用this引用。
Java语法规定:静态成员不能直接访问非静态成员。

有些时候this可以省略。

Java允许使用对象来调用static修饰的Field方法,但应避免这样使用。

方法

  • Java的方法参数传递只有一种方式:值传递

形参个数可变的方法

public class Varargs{
   public static void test(int a,String... books)
   {
       for(String tmp : books)
       {
          System.out.println(tmp);
       }
   }
   public static void main(String[] args)
   {
        test(5,"疯狂Java讲义","ABC");
   }
}

递归方法

方法重载

成员变量和局部变量

隐藏和封装

package、import 和 import static

JDK1.5后新增引入静态成员:
import static java.lang.Math.*;
引入所有静态Field和方法

继承

super限定

如果需要在子类方法中调用父类被覆盖的实例方法,则可使用super限定来调用父类被覆盖的实例方法:

public void callOverrideMethod()
{
   super.fly();
}

多态

Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。如果编译与运行时类型不一到处,就可能出现所谓的多态(Polymorphism)

instanceof运算符

instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类),它用于判断前面的对象是否是后面的粝,或者其子类,实现类的实例。

继承与组合

初始化块

初始化块是Java类里可出现的第4种成员,一个类里可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化后执行

public class Person
{ 
   {
        ; //先执行
   }
   {
        ; //2
   }
   public Person()
   {
       ; //3
   }
   public static void main(String[] args)
   {
      new Person();
   }
}

初始化块只在创建Java对象时隐匿执行,而且在构造函数之前执行。

静态初始化块

在类初始化阶段执行静态初始化块,因此比普通初始化块先执行。
静态初始化块会一直上溯到顶父类静态初始化类先执行,最后才执行该类的静态初始化块。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1183048次
    • 积分:16792
    • 等级:
    • 排名:第666名
    • 原创:669篇
    • 转载:19篇
    • 译文:5篇
    • 评论:180条
    最新评论