java数组定义与初始化,类型转换,instanceof的使用

1、一维数组的声明方式:
type var[]; 或type[] var;

声明数组时不能指定其长度(数组中元素的个数),

Java中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]

实例:
TestNew.java:

程序代码:

 
 
  1. public class TestNew  
  2. {  
  3.      public static void main(String args[]) {  
  4.          int[] s ;  
  5.          int i ;  
  6.          s = new int[5] ;  
  7.          for(i = 0 ; i < 5 ; i++) {  
  8.              s[i] = i ;  
  9.          }  
  10.          for(i = 4 ; i >= 0 ; i--) {  
  11.              System.out.println("" + s[i]) ;  
  12.          }  
  13.      }   


初始化:

1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化。
实例:


TestD.java(动态):

程序代码:

 
 
  1. public class TestD  
  2. {  
  3.      public static void main(String args[]) {  
  4.          int a[] ;  
  5.          a = new int[3] ;  
  6.          a[0] = 0 ;  
  7.          a[1] = 1 ;  
  8.          a[2] = 2 ;  
  9.          Date days[] ;  
  10.          days = new Date[3] ;  
  11.          days[0] = new Date(2008,4,5) ;  
  12.          days[1] = new Date(2008,2,31) ;  
  13.          days[2] = new Date(2008,4,4) ;  
  14.      }  
  15. }  
  16.  
  17. class Date  
  18. {  
  19.      int year,month,day ;  
  20.      Date(int year ,int month ,int day) {  
  21.          this.year = year ;  
  22.          this.month = month ;  
  23.          this.day = day ;  
  24.      }  
  25. }  
  26.  


TestS.java(静态):

程序代码:

 
 
  1. public class TestS     
  2. {     
  3.      public static void main(String args[]) {     
  4.          int a[] = {0,1,2} ;     
  5.          Time times [] = {new Time(19,42,42),new Time(1,23,54),new Time(5,3,2)} ;     
  6.      }     
  7. }     
  8.  
  9. class Time     
  10. {     
  11.      int hour,min,sec ;     
  12.      Time(int hour ,int min ,int sec) {     
  13.          this.hour = hour ;     
  14.          this.min = min ;     
  15.          this.sec = sec ;     
  16.      }     
  17. }    


TestDefault.java(默认):

程序代码:

public class TestDefault     
{     
     public static void main(String args[]) {     
         int a [] = new int [5] ;     
         System.out.println("" + a[3]) ;     
     }     
}                                                                                                             

2、String和int类型转换

int -> String

int i=12345;
String s="";
第一种方法:s=i+"";
第二种方法:s=String.valueOf(i);
这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢?

String -> int
s="12345";
int i;
第一种方法:i=Integer.parseInt(s);
第二种方法:i=Integer.valueOf(s).intValue();
这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢?

以下是答案:
第一种方法:s=i+""; //会产生两个String对象
第二种方法:s=String.valueOf(i); //直接使用String类的静态方法,只产生一个对象

第一种方法:i=Integer.parseInt(s);//直接使用静态方法,不会产生多余的对象,但会抛出异常
第二种方法:i=Integer.valueOf(s).intValue();//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象

1 如何将字串 String 转换成整数 int?
A. 有两个方法:
1). int i = Integer.parseInt([String]); 或i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();//注: 字串转成 Double, Float, Long 的方法大同小异.
2 如何将整数 int 转换成字串 String ?
A. 有叁种方法:
1.) String s = String.valueOf(i);                 2.) String s = Integer.toString(i);                          3.) String s = "" + i;          //注: Double, Float, Long 转成字串的方法大同小异.

3、instanceof的用法和示例

     instanceOf是Java的一个二元操作符,和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。可以用在继承中的子类的实例是否为父类的实现。相当于c#中的is操作符。
         举例说明:

例1、int[][][]=new inta[2][3][4];
System.out.println(a instanceof  int[][][]); //或者System.out.println(a instanceof object);

System.out.println(a instanceof  int[][]); //a是三维数组
System.out.println(a[0] instanceof  int[][]);//a[0]是二维数组
System.out.println(a[0][0] instanceof  int[][]);//a[0][0]是一维数组

 

例2、

String s = "I AM an Object!";

  boolean isObject = s instanceOf Object;

  我们声明了一个String对象引用,指向一个String对象,然后用instanceOf来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为true。

  instanceOf有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:

  public class Bill {//省略细节}

  public class PhoneBill extends Bill {//省略细节}

  public class GasBill extends Bill {//省略细节}

  在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceOf来判断:

  public double calculate(Bill bill) {

  if (bill instanceOf PhoneBill) {

  //计算电话账单

  }

  if (bill instanceOf GasBill) {

  //计算燃气账单

  }

  ...

  } 这样就可以用一个方法处理两种子类。 然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象编程应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:

  public double calculate(PhoneBill bill) {

  //计算电话账单

  }

  public double calculate(GasBill bill) {

  //计算燃气账单

  }

  所以,使用instanceOf在绝大多数情况下并不是推荐的做法,应当好好利用多态。 instanceOf 一般情况下 用在对象类型的强制转换 ,

  例如:

  继承关系 class Manager extends Employee

  public void doSomething(Employee e) {

  if ( e instanceOf Manager){

  Manager m = (Manager) e ; }

  }                                              

4、ArrayCopy的用法
int  a[]={1,2,3,4};
int b[]=new int[4];
System.arraycopy(a,0, b, 0, a.length);
for(int i=0;i<b.length;i++)
 System.out.println(b[i]);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值