java学习之路的自我回顾2(类)

过了一个五一假期以后整个人都有点懒懒的,看书看着看着就犯困,索性下午是睡了会觉,感觉还行,好了,也不多扯了,直接进入主题


关于java中类的相关知识

大部分其实和C++中是一样的

1.类的定义

[修饰符] class 类名

{

零到多个构造器方法

零到多个属性

零到多个方法

}

修饰符可以是final,public或者省略掉,至于final是什么,之后也会提到。

类内的方法,属性等都可以加上static修饰符,学过C++的一定会知道,这是静态变量的意思,当然,加上这个修饰符的话就表明该属性或者该方法是一个类指定的方法,可以被对象和类调用,简单说就是类的对象可以共用该属性or方法,这里有一点要提一下,就是有static修饰的成员不能访问没有static修饰的成员


从前一直认为java抛弃了C++中的指针,但是现在倒是越来越觉得不是这回事,因为java中也存在指针,简单地说,java将指针给封装了起来,所以,当时是谁说java里没指针来着的(快出来我保证不打死你...)


2.this

熟悉C++的童鞋一定知道当你在使用一个对象调用方法后,如果想在该方法中获取对象的话就要使用this指针,该指针指向当前调用该方法的对象地址,在java中,this的使用方法也没什么太大的区别,但是this在这里是一个引用变量,不是指针(我感觉是没什么太大区别了ORZ)

并且,有一点很大的不同是,当使用一个对象调用方法a时,如果想在a中调用方法b,则可以使用this.b() 或者使用 b() ,即可以省略掉this这也算是java中的很不错的改动,C++中是不是也是如此我不是很清楚,但是我基本一直都是带着this的。

这里还要提到一个比较容易忽略的地方,就是在有static修饰的方法中使用this,因为static修饰后该方法为该类共有,即this的引用对象会不明确(可能指向任意一个对象),所以,static修饰的方法,属性,不能直接访问没有static修饰的方法,属性


3.方法中的参数传递机制

因为和C++也是没太大区别,所以也不细讲了。

唯一要提的一点就是,当形参类型为基本类型(int,char,double等)时,在参数传递时会将原始数据复制一份送入方法中(开辟新内存将原始数据放入);当形参类型为引用类型时,则是在方法的栈内存中开辟了新的引用变量来使用(该新的引用变量指向实参引用变量所指向的堆内存地址)。2者的主要区别就是在方法中改变形参值时,实参的值是否会跟着改变,这和指针很像,实际上就是封装的指针。


形参长度可变的方法

形式:

public void a(int x,String...b1)

{

for(String z : b1)

{

system.out.println(z);

}

}

调用时a(20,"hello world","hello java");

其实就是类似于public void a(int x,String [] z)

而且,这样的不定长形参只能出现在参数表最后,即一个方法只能含有一个这样的形参。


4.递归

也没什么好说的,算法相关,这里就不提了


5.成员变量的初始化和内存中的运行机制

其实我觉得内存中的运行机制才是应该去深入了解的,了解了实际的运行机制,才能更好的使用一门语言


例子

class Person

{

String name;

static int num;

}


程序中

1.Person p1=new Person();

2.Person p2=new Person();

3.p1.name="hello";

4.p2.name="world";

5.p1.num=1;

6.p2.num=2;


当该程序运行1时,如果是该程序第一次使用Person类,则程序会在第一次使用Person类时加载该类,并初始化该类,并在准备阶段,为该类属性分配内存空间,并指定初始值。会为num分配内存,初始值为0。

运行2时,会开辟一块新内存用来保存p1的属性值,p1引用该内存地址

3和2的情况相同,4和5将会对已经分配到内存的类变量num进行操作,实际地址不变


类的上半部就是这样了,突然发现码字也很费时间呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值