C\C++ 程序员从零开始学习Android - 个人学习笔记(五) - java基础 - 类(待续)

1,java类概述

  java中没有全局函数、全局变量,只有类。

  每个.java文件能定义任意个数的类,但pulic非内部类只能有一个,并且类名必须与文件名相同。.java文件中可以没有public类,也可以没有和文件同名的类。

  每个类(包括内部类、泛型类)编译后都会生成一个.class文件,.class文件的目录结构必须和类的完全限定名(包名.类名)一致,以便类加载器进行搜索及加载。

2,定义一个类:

Modiferclass ClassName

{

  Modifer ClassName(type param){ }

  Modifertype method(type param){ }

  Modifertype field;

}

实例:
public class MyClass

{

  public MyClass(){ }

  protected fun(int i){ }

  private static final String str = null;

}

2.1 构造器(构造函数)

  类似C++中的构造函数,和类名相同,无返回值,创建对象实例的时候被调用。

  每个类可以有一个以上的构造器。如果没有显式的定义构造器,编译器会自动生成一个无参数的默认构造器。

  可以在构造器的第一条语句使用this(param)语法调用类中的其他构造器。

  可以在构造器的第一条语句使用Super(param)语法调用直接父类中的构造器。

        在构造子类之前,总会先构造父类,通过调用父类的默认构造器或者Super语法直接调用特定构造器。

  在这些时刻会调用构造器:

    a,使用new操作符创建对象。

    b,java.lang.Class或java.lang.reflect.Constructor对象的newInstance方法创建对象(只能调用无参数的构造器)。

  注意,以下这些时刻虽然会创建对象,但不会调用构造器,可以用来在特定场合下高效的产生对象:

    a, 调用任何现有对象的clone方法。

    b, 反序列化。

2.2 method

  方法,即C++中的成员函数。

  和C++不同,java中的方法默认多态,即默认等同于C++中的虚函数,不需要像C++中一样显式声明为virtual.

  java中的方法,无论参数是基本类型还是引用类型,都属于值传递。

2.3 field

  域,即C++中的成员变量。

2.4  Modifer - 限定修饰符,包括static、public、protected、private、final、abstract

  2.1.1 访问级别

    a, public - 所有类均可访问。可修饰类、方法、域、构造器。

    b, proctected - 子类和包(直接定义了该protected方法或域的类所在的包,不包括子类所在的不同包)中的所有类可访问。可修饰方法、域、内部类,不可修饰非内部类。

    c, private - 只有定义了该方法或域的类可访问。可修饰方法、域、内部类,不可修饰非内部类。

    d, 无限制修饰符(或称默认访问级别),包内的所有类可访问。可修饰方法、域、内部类、非内部类。

  2.1.2 static

    不可修饰构造器,不可修饰非内部类,可修饰域、方法、内部类。

    被static修饰的方法(method)和域(field)属于类,而不属于实例对象,无需创建对象即可调用, 所有此类的对象实例共享static方法和域。

    static修饰的域只在第一次加载类的时候初始化,创建实例的时候并不会初始化。

    可以用静态块对static 域进行初始化,同样只在第一次加载类的时候进行初始化。

  2.1.3 final

    可修饰类、方法、域。

    修饰类,表示不允许被继承的类,其所有方法自动为final,但域不会自动为final.

    修饰域,表示常量,初始化后其值不会被改变;在使用前必须被初始化,可以在定义域的时候初始化,可以在初始化块中初始化,静态final变量可在静态初始化块中初始化,可以在构造器中初始化。

    修饰方法,表示该方法不可被子类重写(Override),但依然会被子类继承。

    final有利于编译器优化(由于方法不会被子类重写,所以可以inline),应尽可能使用final,如同C++尽可能使用const(部分近似).

  2.1.4 abstract

    可修饰类、方法。表示抽象类和抽象方法,类似于C++中的纯虚函数、虚基类。

    抽象方法没有方法(函数)体,包含抽象方法的类必须声明为抽象类。

    抽象类不能被实例化,抽象类可以包含具体的方法和域,可以不包含抽象方法。

    抽象类的子类可以实现(具体化)继承来的抽象方法,也可以不实现抽象方法,但必须声明自己为抽象类。

2.5  type

     数据类型,既包括基本类型,也包括引用类型。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值