java对象数组string变量_day9-Java数组、类变量与方法、对象转型

数组

Java的数组既可以保存原始数据类型,如:int, float, char, boolean等,也可以保存复杂对象,如:字符串、Robots类、Triangles类!

类似于C的指针数组,每格可指向一个对象。一旦获取对象,就可以自由调用该对象的属性、方法。

public class RobotArrays{

public static void main(String[] args){

Robot[] robotsA = new Robot[3];//实例化一个(指向3个Robot对象)的数组。new关键字让内存返回指向地址,类似C动态分配

sout(robotsA[0]);//Java数组初始化定义后,默认指向NULL。对比C初始化后指向垃圾值。

robotsA[0] = new Robot("C3PO");//初始化第0格入口地址,指向一个新构造的Robot对象

robotsA[1] = new Robot("C4PO");//初始化第1格入口地址

robotsA[2] = robotsA[0];//初始化为与第0格指向相同。共得2个不同对象、3个指向引用。

Robot[] robotsB = {//也可以{...}的方式,整洁地初始化数组

new Robot("C5PO");

robotsA[0];

robotsA[1];

}

sout(robotsB.length);

for(Robot robot : robotsB){//":"表示循环、按序地让robot指向数组robotsB中所存对象。

sout(robot.name);//注意robot直接指向对象,而不是指向数组location本身!

}

}

}

类变量和方法

使用情景:一个贯穿整个程序的counter。比如,一个名为population的counter变量,来追踪我们一共创建了多少个StyledStrings。而不是在循环中为每个三角形实例设计的counter。

不能用对象变量,因为每个StyledString类中都有一个对象变量。需要用一个“类”变量,比如static int populationSize = 0。这样这个cnt变量就绑定类了,而不是绑定对象。可自由调用。

class StyledString extends String

{

static int populationSize =0;

public StyledString(String text){

super(text);

StyledString.populationSize++;//构造函数中使用static变量做cnt,这样每次生成实例时就自动追踪。

}

public int getPopulationSize(){

return StyledString.populationSize;

}

}

使用static注意事项:类内变量是static时,使用这个static变量的类内方法也要是static的才可以。

类方法vs对象方法:有些方法,更适合“类关联”,而不适合作为“对象关联的”。比如,Math类的random()方法,是类相关而不是实例相关(非三角形、圆形等实例相关)的。

对象转型Casting

使用情景:一个基类的对象想调用子类的方法。比如,shape类下有Triangle类、Rectangle类、Circle类,而getVariant()是Triangle类下特有的方法,因此无法在使用一个通用的shape类对象同时,直接调用这个getVariant()方法。就需要向下转型。

子类的对象可以当作基类的对象来使用称作向上转型(up-cast),反之称为向下转型(down-cast / narrow-cast)

基类向下转型例子:

TwoDimentionalShape[] shapes = new TwoDimentionalShape[100];

...

TwoDimentionalShape firstShape = shapes[0];

Triangle firstTriangle = (Triangle) firstShape;//向下转型,使其相信firstShape是个Traingle.

TriangleVariant variant = firstTriangle.getVariant();

注意:如果被转型的元素本身不是Triangle,而是Rectangle——无法转型。无法将Rectangle转为Triangle。(因为他们不是“向上”,也不是“向下”。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值