JAVA之面向对象(一)

来源:互联网 发布:电力科学研究院 知乎 编辑:程序博客网 时间:2024/06/07 02:49

类与对象

基础知识

JAVA里面可以是任意一个合法的标识符,但从可读性的角度上看,java类名必须是由一个或多个有意义的单词连缀而成,每个单词首字母大写,其余字母小写,单词直接不使用任何分隔符。

类的修饰符可以是public,final.abstract或者省略修饰符。

static修饰的成员不能访问任何没有static修饰的成员,但是没有static修饰的成员可以访问有static修饰的成员。(原理:static修饰的成员尽管可以通过对象访问,但实际上从属于类,当一个类第一次创建时,static成员就会被初始化,而其它无static修饰的成员从属于对象,只有当对象创建时才会初始化,这就造成了这样一种情况——如果static变量可以访问普通变量,可能普通变量并没有初始化,因此导致错误)

通常把static修饰的变量或方法称为类方法或类成员变量,而把没有static修饰的变量或方法称为实例变量或实例方法。

JAVA中通过new来调用构造器,从而返回该类的实例。

成员变量名理论上可以采用任何合法的标识符,但为了可读性,通常采用一个或多个有意义单词来描述——第一个单词首字母小写,后续单词首字母大写,剩余字母统统小写。

构造器的定义语法和定义方法时的语法很像,但是依旧有区别。1.构造器名必须是类名(不能有任何不同)2.构造器不能有返回值类型(如果声明了返回值类型或返回值类型为void,编译器并不会报错,但会将其当成普通方法处理,而不是构造器)

构造器实际上是有返回值类型的,当通过new调用构造器时,构造器返回该类的实例类型。

JAVA的引用是放在栈内存的,其并不真正存储对象。对象的成员变量数据实际是放在堆内存中的,而栈内存的引用只是执行堆内存里的对象。
JAVA不允许直接访问堆内存中的对象,只能通过该对象的引用来操作对象

引用之间的相互赋值只是代表其指向同一个对象。

当没有任何引用指向某个对象,那么这个对象就无法再被访问,这个对象也就变成了垃圾,垃圾回收器会在合适的时候回收垃圾,释放其占用的内存。

如果希望垃圾回收器回收某个对象,可以把指向他的所有引用切断,即全部赋值成null即可。

对象的this引用

this关键字总是指向调用该方法的对象。

this可以代表任何对象,当this出现在方法中的时候,其指向的对象是不确定的——它只代表当前类的实例,只有当这个方法被调用时,它所代表的对象才确定下来。谁调用这个方法,它就代表谁。

大部分时候,一个方法访问类中定义的其它方法,成员变量前加不加this的效果是一样的。

static修饰的变量不能使用this关键字。

如果需要在静态方法中访问另一个普通方法,就只能创建一个对象,不过可以使用匿名对象

如果局部变量中有和成员变量名相同的,成员变量就会被覆盖,在这个覆盖的范围内,要想调用被覆盖的变量,可以使用this。

方法详解

JAVA中的方法不能独立存在,其必须属于一个类或方法。

java里参数的传递方式只有一种——值传递。

举个例子
public static void swap(int a,int b){        int temp=a;        a=b;        b=temp;}
在这个方法里两个值确实被交换了,但在执行方法之后,你会发现值并没有被交换。

在main()方法中调用swap()方法,系统会分别为两个方法分配栈区,用于存储局部变量。main中的局部变量传入swap方法,实际上是在swap()方法的栈区中重新产生了两个变量,并将mian()中的变量值赋值给了这两个变量,因此就算是swap()完成了交换,main中的变量值也没有任何变化。

JAVA对于引用一样是采取值传递的方式。

如果参数是引用,就会发现交换可以成功。但是这是因为传入的引用赋值了新创建的引用,也就是说两个引用指向了同一个对象,因此才成功的完成了交换,其传递方法依旧是值传递。

在JDK1.5之后,java允许定义形参个数可变的方法,但这个形参可变个数必须放在最后面,在类型后面加(...)来表示接受多个形参,也可以以数组形式传入参数。

可变形参本质上讲就是数组。

当有重载方法的参数个数与实参完全匹配时,优先执行形参个数确定的重载方法。

当使用递归方法时,必须有某个时刻方法的返回值是确定的,不再调用其本身,否则会成为死循环。

递归一定要向已知方向递归!!!


0 0