您的位置:首页 > 编程语言 > Java开发

Java 引用类型学习

2015-01-09 23:46 155 查看
引用类型包括:类、接口和数组类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针。

数组:

数组是引用类型,例如int是一个基本类型,但是int[]是一种引用类型。

数组的初始化:静态初始化和动态初始化。静态初始化:type[] arrayname; arrayname = new type[]{element1,element2,element3...}动态初始化:type[] arrayname = new type


引用数组类型 arrayname放在栈区,实际的数组对象存储在堆内存区。只有当栈内存区没有引用变量再指向该数组对象时,也就是该数组失去了引用,成了垃圾,该数组对象会被垃圾回收机制回收。 

Array类里的静态方法:

int binarySearch(type[] a, type key):使用二分法查找key元素在a中出现的索引。该方法要求该数组已经按升序排列。

int binarySearch(type[] a, int fromIndex,int toIndex, type key):在fromIndex和toIndex之间查找。

type[] copyOf(type[] original , int length):复制数组,并指定新数组长度。

type[] copyOfRange(type[] original , intfrom, int to):复制指定位置的元素。

boolean equals(type[] a ,type[] b):判断a和数组b是否完全相等。

void fill(type[] a, type var):给数组a全部赋值var。

void sort(type[] a):对数组a的元素进行升序排序。

void sort(type[] a, int fromIndex, int toIndex):指定元素进行排序。

String toString(type[] a): 将数组转变成一个字符串。

面向对象:三大特征:封装、继承和多态。Java提供了private、protected、public三个访问控制符来实现良好的封装,提供了extends关键字来让子类继承父类。

类是用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在。

static:static修饰的成员表明他属于整个类,而不是某个类的对象,static修饰的成员变量称为是类成员,修饰的方法是类方法。静态成员不能直接访问非静态成员。

构造器:为什么构造器都是 public 类名 (){}?

因为构造器是在创建类实例的时候通过new关键字调用,因为要想让其他类可以创建类的对象,就需要放开权限,对任意其他的类这个构造器都是可见的,只有这样才能创建类。他是有返回值的,返回值就是当前类的实例。

static修饰的方法和field,既可以通过类调用,也可以通过实例调用;而非类方法和非类变量,只能通过实例调用。

Person p = new Person();

这行代码产生了两个东西:一个是p变量,一个是Person对象。p变量存在栈内存,对象实例存在堆内存区,p变量存的仅是Person对象在堆内存区的地址,类似于C++里的指针。当栈里没有对这个对象的引用后,该Person对象被视为垃圾。

Person p2 = p;

这样子,就把该person对象的地址赋值给另一个person类型的引用变量,p和p2都指向该对象。

this:如果访问权限允许,类里定义的方法和field都可以通过类或者实例来调用。this总是指向调用该方法的对象,this关键字最大的作用就是让类中的一个方法访问该类里的另一个方法或field。

Q:static修饰的成员不能直接访问非static成员。

A:因为static修饰的方法,是通过类来调用,在该方法里使用this,this无法指向任何对象,所以不能再static方法里使用this指针,则就不能调用其他非static方法了,因为他们必须通过对象实例来调用。

在main方法里,需要通过创建对象再去调用各个方法。一个类内部的方法调用其他非static field或者方法时,必须通过“this."调用,this一般可以可以省略。

封装:该隐藏的隐藏,该暴露的暴露,通过访问控制符来实现。

Java常用包:

java.lang:包含了核心类,如String、Math、System和Thread,系统会自动自动导入这个包下的所有类

java.util:包含了Java的大量工具类/接口和集合框架类/接口,例如Arrays和List、Set等

java.net::有关Java网络编程相关的接口。

java.io:输入输出

java.text:格式化相关的类

重载:

构造器重载:同一个类里包含多个构造器的时候,就是构造器重载。

可以通过this调用另一个构造器。

方法重载:同一个类的同名方法,但是参数列表不同时,为方法重载。

继承:

子类包含与父类同名方法,当形参列表也相同时,就是方法覆盖。当父类的方法被覆盖了以后,子类的对象将无法访问父类中被覆盖的方法,但是可以通过super作为调用者来调用父类被覆盖的方法。如果父类方法具有private访问权限,则对子类是隐藏的,是不能被子类访问的,也就不能被重写。此时子类再顶一个与该方法同名且同形参列表的方法时,依然不是重写,是定义了一个新方法。

重载与覆盖:

重载主要发生在一个类的多个同名方法之间,而重写发生在子类和父类的同名方法之间。如果子类定义的与父类同名的方法,形参列表不同,就会形成父类方法与子类方法之间的重载,该子类既有父类的这个方法,也有自己定义的方法。

super:用于限定该对象调用他从父类继承得到的field或者方法。super和this一样,不能出现在static方法里面。

如果在构造器里使用super,则用于初始化该对象从父类继承来的field,而不是该类自己定义的field。

多态:

Java引用变量,有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给变量的对象决定。如果两个类型不一样,就出现多态。

Java允许把一个子类对象直接赋给一个父类引用类型,称为向上转型。当把一个子类对象直接赋给父类引用变量时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,不能调用父类没有定义的方法和field。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: