BloveSaga

在希腊帕尔纳斯山南坡上,有一个驰名世界的戴尔波伊神托所,在它的入口处的巨石上赫然锈刻着这样几个大字: 认识你自己!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 12 文章 :: 119 评论 :: 0 Trackbacks

2006年6月4日 #

Java数组的相关操作

1> 在Java中所有的数组都有一个缺省的属性length,用于获取数组元素的个数。
2> 数组的复制: System.arraycopy()。
3> 数组的排序: Arrays.sort()。
4> 在已排序的数组中查找某个元素:Arrays.binarySearch()。
具体的看看下面的2个例子:
code1:
class ArrayTest
{
 public static void main(String[] args)
 {
  /*数组的copy
  int[] num1=new int[]{1,2,3};
  int[] num2=new int[3];
  System.arraycopy(num1,0,num2,0,num1.length);
  for(int i=0;i<num2.length;i++)
  {
   System.out.println(num2[i]);
  }
  */
  //引用类型的数组copy
  Point[] pts1=new Point[]{new Point(1,1),new Point(2,2),new Point(3,3)};
  Point[] pts2=new Point[3];
  System.arraycopy(pts1,0,pts2,0,pts1.length);
  for(int i=0;i<pts2.length;i++)
  {
   System.out.println("x="+pts2[i].x+","+"y="+pts2[i].y);
  }
  /*
  *因为引用类型传递的是引用的拷贝,所以我们修改pts2数组的第二个点的坐标,
  *当我们打印pts1数组的第一个点的坐标时,它的坐标点已经被修改为(5,5)了
  pts2[1].x=5;
  pts2[1].y=5;
  System.out.println("x="+pts1[1].x+","+"y="+pts1[1].y);
  */
 }
}

class Point
{
 int x, y;
 Point(int x,int y)
 {
  this.x=x;
  this.y=y;
 }
}


code2:
import java.util.*;
class TestArray
{
 public static void main(String[] args)
 {
  /*
  int[] num=new int[]{3,2,1};
  Arrays.sort(num);
  for(int i=0;i<num.length;i++)
  {
   System.out.println(num[i]);
  }
  int index=Arrays.binarySearch(num,3);
  System.out.println("index="+index);
  System.out.println("Element="+num[index]);
  */
  Student[] ss=new Student[]{new Student("zhangshan",1),
                            new Student("lisi",2),
                            new Student("wangwu",3),
                            new Student("mybole",3)};
   Arrays.sort(ss);
   for(int i=0;i<ss.length;i++)
   {
    System.out.println(ss[i]);
   }
   int index=Arrays.binarySearch(ss,new Student("lisi",2));
   System.out.println("name="+ss[index].name+","+"index="+index);
 }
}

class Student implements Comparable
{
 String name;
 int num;
 Student(String name,int num)
 {
  this.name=name;
  this.num=num;
 }
 public String toString()
 {
  return "name="+name+","+"number="+num;
 }
 public int compareTo(Object o)  //对于Object[]排序要求实现Comparable接口
 {
  Student s=(Student)o;
  //return num>s.num ? 1 :(num==s.num ? 0 : -1);
  int result=num>s.num ? 1 :(num==s.num ? 0 : -1);//按名字排序
  if(0==result)
  {
   result=name.compareTo(s.name);
  }
  return result;
 }
}

posted @ 2006-06-04 17:30 蓝色Saga 阅读(51) | 评论 (0)编辑 收藏

     你年轻聪明、壮志凌云。你不想庸庸碌碌地了此一生,渴望名声,财富和权利。因此你常常在我耳边抱怨那个著名的苹果为什么不是掉在你的头上?那只藏着“老子珠”的巨贝怎么就产在巴拉旺而不是在你常去游泳 的海湾?拿破仑偏能碰上约瑟芬而英俊高大的你总没有人垂青? 
    于是我想成全你,先是照样给你掉下一个苹果,结果你把它吃了。我决定换一个方法,在你闲逛时将硕大无朋的卡里南钻石偷偷放在你的脚边,将你绊倒,可你爬起后,怒气冲天地将它一脚踢下阴沟。最后我干脆就让你做拿破仑,不过像对待他一样,先将你抓进监狱,撤掉将军官职,赶出军队,然后将你身无分文地抛进塞纳河边。就在我催促约瑟芬驾着马车匆匆赶到河边时,远远地听到“扑通”一声,你投河自尽了。 
     唉!你错过的仅仅是机会吗?
posted @ 2006-06-04 15:23 蓝色Saga 阅读(72) | 评论 (0)编辑 收藏

     西谚说得好:"上帝只拯救能够自救的人."成功属于愿意成功的人.成功有明确的方向和目的.你不愿意成功,谁也拿你没办法;你自己不行动,上帝也帮不了你.
     成功并不是一个固定的蛋糕,数量有限,别人切了,你就没有了。不是那样,成功的蛋糕是切不完的,关键是你是否去切.你能否成功,与别人的成败毫无关系.只有你想成功,才有成功的可能.
     宋朝著名的禅师大慧,门下有一个弟子道谦.道谦参禅多年,仍无开悟.一天晚上,道谦诚恳的向师兄宗元诉说自己不能悟道的苦恼,并求师兄帮忙.
     宗元说:
     "我能帮你当然乐意之至,不过有三件事我无能为力,你必须自己去做!"
     道谦忙问是哪三件.
     宗元说:
     "当你口渴时,我的饮食不能填饱你的肚子,我不能帮你吃喝,你必须自己饮食;当你想大便时,你必须亲自解决,我一点也帮不上忙;最后,除了你自己之外,谁也不能驮着你的身子在路上走."
     道谦听罢,心扉豁然洞开,快乐无比,他感到了自我的力量.
     成功,首先始于自愿自觉.
     当一个人失去生活的目的和意义,万念俱灰时,我们说"无药可救";当一个人动了念头,人了死理,哪怕上刀山下火海不达目的不罢休时,我们说"矢志不渝".
     自己的事自己做.始于心动,成与行动.
      坚定的行动,必然源于深刻的认识和觉悟.
posted @ 2006-06-04 12:30 蓝色Saga 阅读(170) | 评论 (0)编辑 收藏

 通过覆盖父类的方法来实现,在运行时根据传递对象的引用,来调用相应的方法.
code:
class Animal
{
 int height,weight;
 Animal()
 {
  System.out.println("Animal construct");
 }
 void eat()
 {
  System.out.println("Animal eat!");
 }
 void sleep()
 {
  System.out.println("Animal sleep!");
 }
 void breathe()
 {
  System.out.println("Animal breathe!");
 }
}

class Fish extends Animal
{
 Fish()
 {
  System.out.println("Fish construct");
 }
 void breathe()  //override method breathe()
 {
  System.out.println("Fish bubble");
 }
}
class DoMain
{
 static void fn(Animal an)
 {
  an.breathe();
 }
 public static void main(String[] args)
 {
  //Animal an=new Animal();
  Fish fh=new Fish();
  Animal an;
  an=fh;
  DoMain.fn(an);
 }
}

posted @ 2006-06-04 11:40 蓝色Saga 阅读(45) | 评论 (0)编辑 收藏

   理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承.code:
class Animal
{
 int height,weight;
 void eat()
 {
  System.out.println("Animal eat!");
 }
 void sleep()
 {
  System.out.println("Animal sleep!");
 }
 void breathe()
 {
  System.out.println("Animal breathe!");
 }
}
class Fish extends Animal
{
 
}
class DoMain
{
 public static void main(String[] args)
 {
  Animal an=new Animal();
  Fish fn=new Fish();
  
  an.breathe();
  fn.breathe();
  fn.height=30;
  fn.weight=20;
 }
}
Result:
F:\Java Develop>javac Animal.java

F:\Java Develop>java DoMain
Animal breathe!
Animal breathe!
(这说明派生类继承了父类的所有方法和成员变量.)

方法的覆盖(override)
在子类中定义一个与父类同名,返回类型,参数类型均相同的一个方法,称为方法的覆盖,方法的覆盖发生在子类与父类之间.
code:
class Animal
{
 int height,weight;
 void eat()
 {
  System.out.println("Animal eat!");
 }
 void sleep()
 {
  System.out.println("Animal sleep!");
 }
 void breathe()
 {
  System.out.println("Animal breathe!");
 }
}
class Fish extends Animal
{
 int weight,height;   //隐藏了父类的weight,height;
 void breathe()  //override method breathe()
 {
  super.breathe();  //用super调用父类的构造方法
  System.out.println("Fish bubble");
 }
}
class DoMain
{
 public static void main(String[] args)
 {
 // Animal an=new Animal();
  Fish fn=new Fish();
  
  an.breathe();
  fn.breathe();
  fn.height=30;
  fn.weight=20;
 }
}
输出结果:
F:\Java Develop>javac Animal.java

F:\Java Develop>java DoMain
Animal breathe!
Fish bubble

特殊变量super
* 使用特殊变量super提供对父类的访问
* 可以使用super访问父类被子类隐藏的变量或覆盖的方法
* 每个子类构造方法的第一条语句都是隐含的调用super,如果父类没有这种形式的构造函数就会报错.
code:
class Animal
{
 int height,weight;
 Animal()
 {
  System.out.println("Animal construct");
 }
 void eat()
 {
  System.out.println("Animal eat!");
 }
 void sleep()
 {
  System.out.println("Animal sleep!");
 }
 void breathe()
 {
  System.out.println("Animal breathe!");
 }
}

class Fish extends Animal
{
 Fish()
 {
  System.out.println("Fish construct");
 }
 void breathe()  //override method breathe()
 {
  System.out.println("Fish bubble");
 }
}
class DoMain
{
 public static void main(String[] args)
 {
  //Animal an=new Animal();
  Fish fn=new Fish();
  
  //an.breathe();
  //fn.breathe();
  //fn.height=30;
  //fn.weight=20;
 }
}
输出结果:
F:\Java Develop>javac Animal.java

F:\Java Develop>java DoMain
Animal construct
Fish construct

posted @ 2006-06-04 11:18 蓝色Saga 阅读(113) | 评论 (0)编辑 收藏

  苏东坡和佛印和尚是好朋友,但二人喜欢言语相讽,各不相让,经常是苏东坡占下风.
  有一次,苏东破问佛印说:
  "你看我像什么?"
  "我看你像尊佛."佛印说.
  苏东破暗喜,随即就问佛印:
  "那你可知道我看你像什么呢?"
  "像什么?"
  "像一堆屎!"
  佛印语塞.苏东坡哈哈大笑.
  回家后,苏东坡面带笑容哼哼叽叽.
  苏小妹见状问道:
  "哥哥,什么事情这么高兴呀?"
  "哼,佛印这次总算载我手里了!"苏东坡得意的说.
  问明原委,苏小妹大叫道:
  "哥哥,这次你输得更惨了!"
  "为什么?"苏东坡急忙问.
  苏小妹说:
  "因为心中有什么,外在才看到什么.心中有佛,看别人才是佛;心中有屎,看别人就是屎!"
posted @ 2006-06-04 10:54 蓝色Saga 阅读(80) | 评论 (0)编辑 收藏

   E=MC^2,这是伟大的爱因斯坦著名的质能公式:能量等于质量乘以速度的平方。
  人与人在质量,能力(智商)上的差别是很小的,也就是说“M”基本上是个常数。因此,人能发出的能量(success),就取决于其速度(C^2)。

   时间就是胜利。

    竞赛以快取胜,搏击以快打慢,军事先下手为强,商战从"大鱼吃小鱼"到"快鱼吃慢鱼"。跆拳道要求心快,眼快,手快;中华武学一言以蔽之,百法有百解,唯快无解!
    大而慢等于弱,小而快可变强,大而快王中王!快就是机会,快就是效率,快就是瞬间的"大",无数的瞬间构成长久的"强"。
    竞争的实质,就是在最快的时间内做最好的东西。人生最大的成功,就在于在最短的时间里达到最多的目标。质量是"常量",经过努力都可以做好以至于难分伯仲;而时间,永远是"变量”:一流的质量可以有很多,而最快的冠军只有一个-任何领先,都是时间的领先!

  我们慢,不是因为我们不快,而是因为对手更快。
  盛田昭夫说:
  "如果你每天落后人家半步,一年后就是一百八是三步,十年后即为十万八千里。"

   在非洲的大草原上,一天早晨,曙光刚刚划破夜空,一只羚羊从睡梦中猛然惊醒。
  "赶快跑!" 它想到,“如果慢了,就可能被狮子吃掉!“
   于是,起身就跑,向着太阳的方向飞奔而去。
   就在羚羊醒来的同时,一只狮子也醒了。
  ”赶快跑“,狮子也想到,”如果慢了,就可能被饿死!“
   于是,起身就跑,也向着太阳的方向飞奔而去。

   谁快就谁赢,谁快就谁生存。一个是自然界兽中之王,一个是事草的羚羊,等级差异,实力悬殊,但生存却面临同一个问题-如果羚羊快,狮子就饿死;如果狮子快,羚羊被吃掉。
  贝尔在研究电话时,另一个叫格雷的人也在研究。两人同时取得突破。但贝尔在专利局赢了-比格雷早了两个钟头。当然,他们两人当时是不知道对方的,但贝尔就因为这120分钟而一举成名,誉满天下,同时也获得了巨大的财富。

  谁快谁赢得机会,谁快谁赢的财富。
  全世界的目光只会聚焦在第一名的身上。冠军才是真正的成功者。第一名后面,都是输家。
  时间的"量"不变,但"质"却不同。关键时刻一秒值万金。
posted @ 2006-06-04 10:53 蓝色Saga 阅读(105) | 评论 (0)编辑 收藏

    从今天开始从零学习JAVA,希望可以认识到更多的朋友,可以让自己的JAVA之路走得更为顺利一些!买了几本书来看也听了几接课,觉得JAVA很吸引我,我想我可以走得更远的.自信是最重要的.
    OOP(Object Oriented Programming)描述的是对象与对象之间的相互作用.听老师将面向过程与面向对象的最大区别是: 过程化程序设计先确定算法,再确定数据结构,再确定运算.面向过程编程,习惯于先建立数据结构存放数据并定义方法(函数)来操作数据;而面向对象的则是构建一个模型,将数据与方法组织在一起.
    我们可以把现实世界的事物抽象为对象.对象一般都有两个特征:状态(Status),行为(Behavior).软件的对象概念是由显示世界对象抽象而来.把现实世界的状态保存软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现.
    我们把相似的对象划分成一个类.在软件中类就是一个模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法).类是创建对象的模板,对象是类的实例.
    面向对象编程的难点在于思路的转变.我们通常习惯与考虑解决问题的方法,而不是抽象成对象再去解决它.
 类的构造方法
* 构造方法的名字和类名相同,并且没有返回值.
* 构造方法主要用于定义类的初始化状态.
* 我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例.
* Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会提供一个缺省的构造方法,也就是不参数的构造方法.
方法的重载(overload)
 重载
构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载.
code:
class Point
{
 int x,y;
 /*
  *带参数的构造方法和不带参数的构造方法就构成了方法(函数)的重载
 */
 Point(int a,int b)
 {
  x=a;
  y=b;
 }
 Point()
 {
  
 }
 void output()
 {
  System.out.println(x);
  System.out.println(y);
 }
 public static void main(String[] args)
 {
  //调用不带参数的构造方法
  //Point p=new Point();
  //pt.x=10;
  //pt.y=20;
  //p.output();
  Point p1=new Point(3,3); //调用带参数的构造方法
  p1.output();
 }
}
特殊变量this
* this变量代表对象本身
* 当类中有两个同名变量,一个属于类(类的成员变量),一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量.
* 使用this简化构造函数的调用
code:
class Point
{
 int x,y;
 /*
  *带参数的构造方法和不带参数的构造方法就构成了方法(函数)的重载
 */
 Point(int a,int b)
 {
  x=a;
  y=b;
 }
 Point()
 {
  this(1,1);
 }
 void output()
 {
  System.out.println(x);
  System.out.println(y);
 }
 /*output()方法定义的形参与成员变量同名了,
 *那么在output()里就看不到成员变量的x,y了,它被隐藏了.
 */
 void output(int x, int y)
 {
  this.x=x;
  this.y=y;
 }
 public static void main(String[] args)
 {
  Point pt=new Point(3,3);
  pt.output(5,5);
  pt.output();
 }
}
一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在内的没个对象中都存在着一份拷贝.this变量允许相同的实例方法为不同的对象工作.每当调用一个实例方法时,this变量被设置成引用该实例方法的特定的类的对象.方法的代码接着会与this所代表的对象的特定数据建立关联.
posted @ 2006-06-04 10:51 蓝色Saga 阅读(32) | 评论 (0)编辑 收藏