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的错误,希望大家注意!

Linux扎记(二)

装完Guake和ZSH,耍起控制台来就溜很多了。所以接下来可以配开发环境了。 首先,JAVA环境肯定必不可少,这里找到了网友的一篇关于ubuntu13.04安装JDK7.0的文章:http://b...
  • C860_zy
  • C860_zy
  • 2013年06月08日 05:13
  • 1067

《Thinking in Java》读书笔记(不断更新中)

概述春节在家乡,家里的电脑都是我上大学时淘汰的,要么运行不起来AS,要么连接不上手机,要么编译不了程序,这Android是写不了了。 记得前几天写插件的时候,用过Intellij IDEA,感觉很流...
  • zxt0601
  • zxt0601
  • 2017年01月31日 11:29
  • 970

扎金花大小比较算法(Java版)

扎金花大小比较算法,实现算法特点: 1)采用面向对象方式实现,分别构造牌面值的对象(枚举)、牌的花色对象(枚举)、玩家三张牌的类型(枚举,如豹子、同花顺等)、一张扑克牌对应的对象(一张牌有一个牌面值属...
  • dobuy
  • dobuy
  • 2014年06月17日 00:10
  • 4831

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

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

JAVA学习练习(扎金花与21点)

目前转行学习JAVA。记得N年学过C++,接触JAVA后感觉上手比较容易。学习半月熟练使用循环、判断,自行看书了解JAVA类的使用,并尝试用类完成编程。大概完成了老师题目,纯新一个,类和方法用得很混乱...
  • Heavy_ANT
  • Heavy_ANT
  • 2015年04月27日 19:56
  • 1206

Thinking In Java笔记(第八章 多态)

第八章 多态    在面向对象的程序设计语言中,多态是继抽象和技能之后的第三种基本特征。多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序。     多态的作用是用来消除类型之间的耦合关系...
  • Jing_Unique_Da
  • Jing_Unique_Da
  • 2015年06月10日 10:19
  • 1487

Thinking in Java 源码的获取以及编译问题

《Java编程思想》的源代码的获取、编译过程,以及编译中碰到的错误。还有Ant程序的获取和配置。...
  • pdcxs007
  • pdcxs007
  • 2014年01月09日 10:05
  • 3198

Thinking in Java:容器深入研究

1.虚线框表示Abstract类,图中大量的类的名字都是以Abstract开头的,它们只是部分实现了特定接口的工具,因此创建时可以选择从Abstract继承。Collections中的实用方法:挑几个...
  • zhangqix
  • zhangqix
  • 2016年04月01日 19:48
  • 749

第21章 并发 ——《Thinking in Java》学习笔记

说道并发,就有种异常高大上的感觉,好像比那些顺序编程有种不可明辨的优越感一样,是的,并发的确更深奥,而且现在全世界都离不开并发程序。 但是什么是并发?并发能做什么?并发如何实现? --------...
  • u010635780
  • u010635780
  • 2014年08月12日 19:40
  • 753

Thinking in java学习笔记-并发(一)

一、线程和进程 进程:进程是运行在它自己的地址空间内的自包容的程序 线程:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行...
  • linsawako
  • linsawako
  • 2016年11月20日 18:30
  • 491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Thinking in Java学习扎记(二)
举报原因:
原因补充:

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