Thinking in Java学习扎记(二)

转载 2004年08月27日 14:58:00

打造第一个java程序
名称的可视性
         名称问题有些人觉得不是什么大问题,我开始也觉得那不是个什么大问题,但是当你有一天写了很多的类时,你就发现,名称其实真的很重要,假如你有这么一个类,他需要调用其他几个类, 当这几个被调用类名相同时,问题就出现了,那么怎么区分他们,并且使他们的名称不会冲突呢?

        毕竟我们不可能把每个声明过的类的名字一一记住,以便在下次声明其他名称时加以区分。这个时候我们就需要使用包(package)了,一个包就是一个命名空间。命名空间的使用规则是:反转internet域名,例如,我的blog是blog.csdn.com/manud你可以在类的开头使用package manud.com.csdn.blog,这样就好了~每个包都是一个独一无二的命名空间。需要注意一点:当使用package说明一个包时,该包的层次结构必须和文件目录的结构相同!就象c:/manud/com/csdn/blog
使用其他组件
        包定义了之后一定要使用的,如何使用呢?在文件的开头使用import关键字,假如我要导入我开发的一个叫hello.class组件,我只要这样写import manud.com.csdn.blog.hello;就可以导入我所创建的包,当然你也可以偷懒,用import manud.com.csdn.blog.*;  导入该文件夹里所有的包(也许你有的包根本用不上),但是这样有个弊端,就是编译的速度要比直接指明包的编译速度要慢。
关键字static(静态的)
        一个class只有在你使用new来产生对象时,他的函数才能被外界调用,但是也有两中情况是用上面的方法无法实现的:
           1、不管产生多少的对象或没有对象产生对象时,一些特定的数据存储只有一份;
           2、类中的某个函数不想和对象绑定在一起,即我不想产生对象,但是我还想用类中的一个函数;
        一般情况下,你要使用一个非静态(non-static)的成员的话,必须先产生一个对象,使用对象来调用这个数据或函数,所以你必须知道这个函数/数据属于哪个对象才行,因为static是不用产生对象就可以使用的,所以在static的函数中不能直接调用non-static的函数或变量。
        解决方法1:把static关键字放在成员变量或函数定义之前,就可以使他们变为静态的。
            class StaticDemo
            {
             static int i=888;
             public static void main(String[] args)
             {
              StaticDemo sd1=new StaticDemo();
              StaticDemo sd2=new StaticDemo();
              System.out.println(sd1.i);//888
              System.out.println(sd2.i);//888
              StaticDemo.i++;
              System.out.println(sd1.i);//889
              System.out.println(sd2.i);//889                
             }
            }
            现在即使你产生n个StaticDemo对象,但是i只有原始的一份,不管你是sd1.i还是sd2.i,其实就是同一个i,全部引用自这个StaticDemo.i,所以,只要改变StaticDemo.i内存储的数据,这些sd1和sd2的i都会改变,因为他们的i的句柄全部指向的是StaticDemo.i这一个内存空间,就相当于,有一个人在a公司工作,还在b公司兼职,而他假如死掉了,则同时影响2家公司,就是这个意思,同样的道理也适用于static的函数
        解决方法2:要想不产生对象就能使用函数,这样需要在函数名前加上static
              class StaticDemo
              {
               public static void show(String s)
               {
                System.out.println(s);
               }
               public static void main(String args[])
               {
                show("one");//调用方法1
                StaticDemo.show("two");//调用方法2
                new StaticDemo().show("three");//调用方法3
               }
              }

              对于调用方法1,其实他隐藏了一个关键字,就是this,他的完整形式应当是this.show("one"),这个this的用法以后会学到。
              对于调用方法2,使用的是className.method()的形式,这个也就是static的函数调用的典型形式,non-static的函数是不能使用这样的方法调用的!
              对于调用方法3,这个方法就是我们调用函数的一般方法,先创建对象,再由对象调用函数,这个方法对于static和non-static是同样适用的。某个成员变量在声明为static的时候,其建立的方式有很大的变化,但是static的函数变化不大,static函数最大的一点用处就是可以在不建立对象的情况下,调用函数,就像我们经常见到的main函数一样。
你的第一个java程序
        java程序默认的会把java.lang下的包导入到你所创建的文件中,我们没有必要再使用import来导入。一个public的class的名称一定要和文件名称是一样的,并且一个class里面只允许有一个public的class,否则程序是编译不过去的。如果你要运行这个类的话,那么这个类中一定要有一个main()函数,他的固定格式为public static void main(String[] args),其中,public表示这是一个公开给外界使用的函数,并且是个static的不允许有返回值,而传入main()的参数必须是个String对象数组,即使你从来没有过,这个args的string数组可以存储cmd的参数。                  
编译与执行
        使用javac  文件名.java 来编译java文件,使用java  className 来执行className这个类,这里要注意l两点,第一个是当你使用java命令执行一个类时,这个类必须要有main函数;第二个className不一定等于文件名,一个java文件中假如有public类,那么这个类名必须要和文件名相同,其他情况你可以随你自己的意思起名字。
注释及内嵌文档
       //注释单行 /*.......*/注释多行,多行注释内不能嵌套多行注释。
寓文档于注释
        javadoc命令可以将内嵌在程序代码中的文档提取出来,生成html格式的文件,使用浏览器就可以查看。
语法
        这个部分我就跳过去了,有兴趣的朋友自己看看,很简单的
编码风格
        类名在编写的时候,应当第一个字母大写,如果名称是由多个单词组成,则把这些个单词合在一起写,并且把他们的第一个字母大写 例如 public class MyFirstClass。
本章总结:
        这一章总算OK了,呵呵~其实这章讲的不难,大家就是要仔细看书,好好体会oop的精髓
本章习题解答
        这章的习题总体不难,唯独有一个题是运用了后面学习的知识,我们就把他作为难题来对付好了。 "撰写某个程序,使它能够接受由命令行传入的3个参数,为此,你需要对代表命令行引数的string数组进行索引"
  public class Solve
  {
   public static void main(String args[])
   {
    System.out.println(args[0]);
    System.out.println(args[1]);
    System.out.println(args[2]);
   }
  }
这个程序可以接受3个引数,并且把他显示出来,有的人会问了:我们怎么把引数传递进来呢。大家在运行时,要在java Solve后面加个空格,在加三个引数,每个使用空格隔开,例如 java Solve aaa bbb ccc这样程序就会接受到这3个引数,并且把他显示。当你输入引数和接受引数的数量不符时候,会报ArrayIndexOutOfBoundsException的错误,希望大家注意!

《Thinking in Java》读后总结与感想

作为Java界的四大名著之一《Thinking in Java》一直备受推崇,我很早就知道了这本书,当时只是初涉Java,粗略的翻了翻之后觉得看起来这本书讲的比较深就没有再去碰它,后来Java基础学完...
  • qq_28899635
  • qq_28899635
  • 2017-01-16 09:47:54
  • 1963

Thinking in Java学习扎记(八)

Array的初始化    array其实就是一组对象或者一组基本数据类型的数据,每一个array中的数据必须是同一种类型,并且以一个标示符封装在一起    例如    int[] i;    或者  ...
  • manud
  • manud
  • 2004-09-04 18:06:00
  • 452

Thinking in Java学习扎记(九)

第五章       隐藏实现细目  首先考虑oop的一个重要思想--让变动的东西和不变动的事物彼此分开。  java库的程序员在编写库的时候最需要考虑到的就是,一旦他们改变类中的某个函数或者是成员变量...
  • manud
  • manud
  • 2004-09-04 18:08:00
  • 412

Thinking in Java学习扎记(五)

流程控制   java中的流程控制语句有 if-else  whlie  do-whlie  for   switch-case  但是没有提供goto,他在java中是保留字,不是关键字(以后可能会...
  • manud
  • manud
  • 2004-08-27 16:19:00
  • 741

Thinking in Java学习扎记(三)

第三章   控制程序流程        在java的世界中,对象和数据的处理是通过运算符,而选择和判断则是靠控制语句来实现的。        使用java运算符        运算符的两个用处:1、运...
  • manud
  • manud
  • 2004-08-27 15:16:00
  • 462

Thinking in Java学习扎记(四)

逻辑运算符  逻辑运算符 AND(&&)?? OR(||)? NOT(!)? 都会得到一个boolean值,且他们只能用于boolean身上。逻辑表达式中的boolean无法使用类似于c/c++中的数...
  • manud
  • manud
  • 2004-08-27 16:16:00
  • 489

Thinking in Java学习扎记(六)

第四章?? 初始化和清理         我个人理解初始化和清理的关系就是吃饭和上厕所,正是有了初始化的对象,我们才能使用清理。但是为什么要清理呢?想象一下一个人光吃不拉,是个什么情况?:)难道我们的...
  • manud
  • manud
  • 2004-08-27 16:06:00
  • 652

Thinking in Java学习扎记(七)

清理:终结与垃圾回收        这里要明白这么几点        1、垃圾回收器只能回收由new产生的对象,如果你使用或产生了非new产生的对象,垃圾回收器是不知道如何把他清理掉的 。这个时候就要...
  • manud
  • manud
  • 2004-09-04 18:05:00
  • 610

Thinking in Java学习扎记(一)

第一章 对象导论       其实这章介绍的是OOP的思想,知道什么是抽象、接口、继承等等,其实这些我觉得没有必要专门提出来写一章,这个我就不介绍了,在以后的学习中,这些知识是会在里面融会贯通的。第二...
  • manud
  • manud
  • 2004-08-27 14:34:00
  • 563

thinking in java学习笔记-第一章

最近开始拜读java编程思想这本书,这本书的经典之处我就不过多宣扬了,在这里我只谈谈我读这本书的感受。 这本书是由Bruce Eckel,这个人也许不熟悉,但是他的作品可是如雷贯耳啊,Bruce E...
  • wtxwd
  • wtxwd
  • 2016-12-20 17:20:01
  • 650
收藏助手
不良信息举报
您举报文章:Thinking in Java学习扎记(二)
举报原因:
原因补充:

(最多只允许输入30个字)