• 首页
  • 小学语文
  • 中学语文
  • 中学英语
  • 免费论文
  • 教学随笔
  • 学生作文
  • 综合考试
  • 试题教案
  • 育儿话题
  • 教学资源
  • 编程技术
  • 博客
  • Java 2教程读书笔记

    日期:2005-07-01  地址:  作者:
    第一章 Java的基本概念
      编译和执行示例程序
      Java的最大优点
      Java虚拟机
      Java平台
      Java语言
      Java库
      三种执行环境
    1.1 编译和执行示例程序
      1.下载和安装Java软件开发工具包(Java Software Development Kit,SDK)
      2.按照以下规则编写和编译Java程序
        java类或模块的名字必须匹配它所在文件的名字,这里的匹配指完全匹配,包括字母的大小写;
        避免使用开发环境;
      3.将程序写入myframe.java的文件(文件名必须有一个.java的后缀)
      4.打开一个命令行窗口,等待DOS提示符,或者在UNIX中使用SHELL,输入命令编译程序:
        java myframe.java
      5.成功编译后,将会建立一个称为myframe.class的文件;
      6.使用命令执行java类文件:
        java myframe   

    1.2 Java的最大优点
      1.软件的可移植性;
      2.J2EE、J2ME、J2SE的区别:
        Sun公司定义3个不同版本的java平台,来实现让一个系统软件在所有的计算机上运行。
        在所有的平台上,语言都是相同的,但是捆绑的库不同。
        J2EE企业版(大型平台):
          用于构建企业级的服务器应用,它包含标准版中的任何组件,并增加了附加库,以支持目录管理、交易管理以及企业消息处理等功能;
        J2ME微型版(小型平台):
          用于嵌入式的消费型产品中,如移动电话、掌上电脑、汽车导航系统或其他无线设备;
        J2SE标准版(中型平台):
          标准的JDK开发平台,其中包括编译程序和运行时系统。利用这个工具,可以编写、部署和运行java应用,用于桌面的applet以及低端的服务器;

    1.3 java虚拟机           
        JVM:Java Virtual Machine Java虚拟机
        JRM:Java Runtime Environment Java运行时环境
        ABI:Application Binary Interface 应用二进制接口,是一个程序在运行时应用的环境,也是一种可执行文件的格式。
            操作系统都有自己的进程地址控件,硬件系统也各不相同;
            java在所有的计算机上都使用相同的ABI;
            java运行时环境JRE,包括java虚拟机,是java ABI与各种硬件/操作系统ABI之间的桥梁。
        1)java源代码编译后生成的目标代码时一种字节码(bytecode),与其他语言不同的是:java的字节码是一种中立结构的机器代码(不是任何现有系统上的二进制指令代码),通过JVM可以快速地解释并运行在任何特定的计算机上。
        2)java程序的执行通过JVM实现;
        3)一般情况下,JVM是在运行java程序时调用的;
        4)JVM读取字节码程序,解释或翻译成实际的机器指令后再执行,实行了java的“一次编写,多处运行”的特点; 

    1.4 java平台
       java平台的组成部分:
       1)java编程语言;
       2)java虚拟机(解释程序/编译程序)
       3)伴随系统的软件库
       4)运行时环境
       javascript不是一种通用的应用程序语言,主要用于浏览器编程。

    1.5 java语言
       java是一种面向对象的编程语言,是一种强类型的语言,具有数据声明、操作数据的语句;
       java称函数为方法;   
       java程序的执行从一个特定的main()方法开始;

    1.6 java库
       API:应用程序接口
       java库分为两类:
         1)捆绑到JDK中的核心库:每个JDK都必须支持;
         2)可选的JDK附加标准库;
       核心API及其功能
         1)java运行时:标准的运行时库,其中包括I/O、联网、applet、基本的窗口系统、数据结构、国际化、数学运算等java库;
         2)java基础类:Swing GUI库、java 2D图形和访问支持(可视化的GUI支持);
         3)安      全:支持数字签名、X.509数字证书和消息摘要等(可以出口到世界各地)
         4)java   IDL: JAVA接口定义语言,可用于与CORBA中间件进行对话;
         5)JDBC      :java数据库通用性,支持数据库访问;
         6)java Bean :软件组件库;
         7)java RMI  :java远程方法调用,用于与其他java进程(包括其他系统上的java进程)进行通信;
      
       java包也称为类库,是API系列中的一个API;   
       JCP:JAVA Community Process 成立于1998年,是java平台发展的一种组织形式,也是一个开放的论坛;

    1.7 三种执行环境  
       java程序有三种执行环境:
       1)单独的程序:称为应用或应用程序;
       2)在浏览器中运行的程序:称为applet,其仅仅是在浏览器内部运行的小应用程序;
       3)在web服务器中运行的程序:称为Servlet。
      
       浏览器中包含一个JVM,它将在客户端上执行applet。
       Servlet是当用户浏览相应于某个Servlet的URL时调用的一种java程序,它的输入来自服务器,输出返回服务器,通常又转发给客户。

    第二章 面向对象的编程
      抽象
      封装
      基本类型与类类型的比较
      对象概念的总结
      创建新的对象:构造函数
      每个实例与每个类中成员
      final限定符
      访问限定符
    2.3 基本类型与类类型的比较
      java有8个内置数据类型:
        1)字节byte
        2)短整数short
        3)整数integer
        4)长整数long
        5)浮点数float
        6)双精度浮点数double
        7)字符char
        8)布尔boolean
    2.3.1 定义类型
       定义一个基本类型:int
       定义一个类类型: 
    2.3.2 声明变量
       类类型的变量称为对象; 
       声明一个基本变量:int count,i;
       声明一个对象变量:Fruit lemon,apple,f;
       当声明一个类类型的变量时,实际上并没有创建对象;
    2.3.3对象与对象引用
       当声明一个基本类型变量时,除分配内存外,还可以立即开始为变量赋值;
       当声明一个类类型的变量时,只是用null值对其进行初始化(不指向任何实体),而且在变量指向一个对象之前,不能为对象数据字段进行赋值;
    2.3.4 基本类型上的运算/对象中的方法
       j+5
       对象上的运算采用方法调用,而不是运算符。
       方法和对象中字段称为对象的成员,lemon.grame;
    2.4 对象概念的总结
       类:类是用户定的类型,描述了组合在一起的字段和方法,用以表示某个客观对象。更新字段的唯一手段是调用方法。类称为非基本类型。
       对象:一个对象属于某一个类,对象保留其字段中的值,也可以拥有他的方法调用。在典型情况下,对于任何一个给定的类,可以存在许多对象。我们说一个对象是类的实例。通过引用变量既可以得到一个对象。在使用引用变量之前,必须分配(声明)一个对象。
       基本类型:是java中8个基本数据类型之一,基本类型不包括其他任何类型,与非jiben或类类型相反。
       基本变量:把一个变量声明为java中的8个基本数据类型之一,既可以得到一个基本变量,基本变量可以直接为数据分配内存。
    2.5 创建新的对象:构造函数
       构造函数是一种特殊的方法,只能用于创建和初始化一个新的对象。也就是,它是内存分配器和初始化程序。
       构造函数为对象分配内存,并为其字段赋值;
       构造函数的方法总是具有与类相同的名字。
       许多类都至少有一个显式构造函数。
       可以定义若干个不同的构造函数,然后通过它们的参数类型区别它们。
       使用this()方法调用同一个类中不同的构造函数。
       构造函数可以调用另一个调用函数。
       当一个构造函数显式地调用另一个构造函数时,这个调用必须是发出调用的构造函数中的第一个语句;
       程序员不能在对象已经创建之后再显式地调用构造函数。                  
       java语言规范中规定:不能把构造函数作为类的成员。
       java中几乎每一种元素都是对象,它们都是通过调用构造函数创建的。
       如:Cheese cheddar = new Cheese(matured);
    2.5.1 继承的基本知识
       一个类基于另一个类的技术,称为继承;
       子类对象总是可以赋值到父类对象,反之不然;
       如:Fruit lime = new Citrus(); //Citrus 是子类
       系统中的所有对象都是java.lang.Object的子类型。
    2.5.2 怎样调用构造函数
       当类中没有提供任何显式构造函数时,则会分配一个默认的无参数构造函数。默认的无参数构造函数不需要任何参数,也不执行任何动作,但它能够确保每个类总是至少拥有一个构造函数。
       因此,当我们真正提供了任何构造函数时,一般不要使用默认的无参数构造函数。
       当对象实例化时,其内部的工作过程为:
       1)为对象分配内存
       2)内存清零,使所有的数据字段均填以默认值0、0.0或null等。
       3)调用构造函数,且可以显式地调用同一个类中的另一个构造函数
          如:Fruit() {
                this(55,10);
                      }  
       4)对象父类中的构造函数总是通过使用super(someArguments)被显式地或隐式地调用。这是一种递归调用,意味着父类中的构造函数又调用它自己的父类中的构造函数。如此类推,直到最终调用了Object类中的构造函数。因此,构造一个新的对象可以引起若干方法调用,代价很大。
       5)任何带有显式初始化语句的数据字段都会执行初始的赋值;
       6)执行对象构造函数中的其他语句。
    2.5.3 无析构函数
       析构函数方法用于回收对象;
       java具有自动的存储管理功能,其中包括回收不再使用的对象。因此,程序员只需删除、覆盖或者用null撤销对象最后的引用,相应的对象就可以析构,其占用的内存就可以被其他对象重用。
    2.5.4 方法
       方法式面向对象编程对函数的称谓。方法总是需要在类中声明,而且不能存在于类的外部。
       通过方法名调用方法;
       在一个类中可以有若干个具有相同名字的方法,同名的方法可以认为重载了相同的名字;
       具有相同名字的方法应当进行同样的操作。
       语法格式为:optAccess returnType methodName(optArgumentList)optionalThrowsClause{
                      ....statements....
                   }        
    2.5.5 总是利用“引用变量”得到一个对象
       java中的所有对象总是且只通过内存引用访问的,这种方式称为间接寻址。绝对不应当直接涉及对象,而只能通过一个保留地址的变量访问对象。
    2.5.6 null引用
       意味着不引用任何对象;
       1)声明一个对象变量并没有创建相应的对象;
       2)利用“==”运算符比较两个对象变量,实际上只是比较变量中保留的指针,而不是对象的内容。因此,通常应定义一个用于比较的equal()方法
       3)作为参数传递的对象引用的副本将压入堆栈中,原始对象中的字段因而可以被方法改变或更新,但不能让原始引用指向一个不同的对象。
       4)易于声明一个类,其中类本身的实例又作为它的字段。
       5)因为一个引用变量可以自动撤销引用,以得到对象中字段的内容,因此,很容易看出是对指针进行赋值和比较而不是对象。     
    2.5.7 动态的数据结构
       如创建二叉树:
       class Tree {
         private Object data;
         private Tree left;
         private Tree right;
         }
    2.6 每个实例和每个类中的成员
        static:只用一次,每个类中只有一个。
        java中有4个静态成员的变体
        1)数据:属于类而不是单个对象的一组数据
        2)方法:属于类的方法
        3)代码块:只执行一次的代码块
        4)类 :嵌套在另一个类中的类
    2.6.1 静态数据
         静态变量也称为类变量
    2.6.2 静态方法          
         当方法所做的处理只是与整个类有关,而并不特别针对一个实例时,应把这个方法声明为静态的。
         如:java.lang.String类有若干个valueOf()方法,为静态的,因此无需使用字符串实例化就可以调用它们,
         String s = String.valueOf(-12.0); 
    2.6.3 静态代码块
         是有关键字static前缀的代码块。必须处于类的内部以及所有方法的外面。它属于类,多用于初始化。
         静态代码块只可以访问静态数据。一个类中可存在多个静态代码块,将按照其出现在源代码中的位置依次执行。
    2.6.4 静态类
    2.7 final限定符
        意味着无法再改变,用于限定某一个元素为常量。
        final static int myTotal =1000;
        final Fruit banana =new Fruit(200.21);              
        void someMethod(final MyClass c,final int a[]){
         c.field=7;
         a[0]=7;
         c=new MyClass();//final means this line is NOT ALLOWED
         a=new int[13];
    2.7.1 空的final
         当一个数值在声明中计算起来太复杂,或者可能会引起异常情况出现,或final值取决于传递给构造函数的参数时,都应使用空的final变量。
    2.8 访问限定符
        每个元素只能选用一个限定符。
        1)private 私有方式:类中的成员不能被类外部的方法等访问。把构造函数定义为私有的,可以防止一个类被其他类实例化。把一个方法定义为私有的,则意味着该方法只能被同一类中的其他方法访问;
        2)“无”:称为包访问,默认方式,意味着类中的成员只能由同一java包中的其他类访问。类可以指定包访问方式,或公有访问方式。
        3)protect 保护方式:类中的成员允许同一java包或该类中的子类访问。
        4)public 公有方式:在任何地方,只要能够访问该类都可以访问其成员。一个类可以定义为包访问方式,也可以定义为公有方式。         

    第三章 示例程序的解释
       示例程序的解释
       应用程序从何处开始执行
       运行时的内部工作原理:堆栈和堆
       Object类
       阅读Java API文档
       1)Jar 是JDK的一个工具软件,用于解压缩文件
       2)ASCII American Standard Code for Information Interchange
       3)javadoc:java工具,是JDK的一部分,是一种文本编程系统的实现。
    第四章 标记符、关键字与类型
       Java和Unicode
       扫描
       标记符
       注释
       关键字
       基本类型
       字符串连接
       字符串比较和intern()方法
    4.1 java 和Unicode
       Unicode是ISO标准16位字符集,支持65536个不同的字符。
       java内部使用2个字节表示每个字符,采用Unicode字符。
      
    4.2 扫描
    4.3 标记符
    4.4 注释
        1)使用“//”,行注释
        2)使用“/*         */”多行注释
        3)使用“/**        */”,表明这里的内容可以由自动文档生成器javadoc读取
           javadoc注释必须放在方法的外部。
    4.5 关键字
        1、用于内置类型:
           1)boolean
           2)char
           3)byte           
           4)short int long
           5)float double strictfp
           6)void
        2、用于对象
           1)new
           2)this
           3)super
        3、用于语句
           1)选择语句: if else
                         switch case break default
           2)循环语句:for continue
                        do while
           3)控制转移语句:return throw
           4)异常处理语句:try catch finally assert
           5)线程语句:    synchornized                                 
        4、用于修饰声明(可视化、共享性)
           1)static
           2)abstract
           3)final
           4)private
           5)protect
           6)public
        5、用于其他方法或相关类
           1)class
           2)interface
           3)throws
           4)native
           5)transient
           6)volatile
        6、用于类的扩展和接口的继承
           1)extends
           2)interface
           3)implements
           4)package
           5)import
        7、留作将来使用                 
           1)constant
           2)goto
    4.6 基本类
    4.6.1 布尔类型
        取值范围:true、false 
        直接量:是一种在编译时提供的值,只需在程序中编写需要的具体数值。
        如:if (true) x=33;
        不能够把布尔值转化成任何类型的值   
    4.6.2 整数int类型
        是32位的有符号二进制补码
        取值范围:-2 147 483 648~2 147 483 648
    4.6.3长整数类型
        long是64位的有符号二进制补码
        取值范围:-9 223 372 036 854 775 808 ~9 223 372 036 854 775 808
    4.6.4 字节类型
        byte:8位有符号二进制补码形式的数值。
        使用字节的理由是:存储通用的8位数值,为了匹配现有的数据文件中的值,为了节省存储空间。
        取值范围:-128~127
        若把一个范围较大的数据类型的数值(非直接量)付给一个范围较小的数据类型的变量,必须先进行强制转换。因为算术运算总是按至少32位的精度执行,这意味着在为字节变量赋值时,如果其中包含任何算术运算,必须总是对运算结果进行强制转换。
        如:byte b1=1,b2=2;
           byte b3=b1+b2; //错误
           byte bs=(byte)(b2+b1) //正确  
    4.6.5 短整数类型
        short:16位有符号二进制补码形式的整数,用来匹配已经存在于文件中的外部数值,以及节省存储空间。
        取值范围:-32 768~32 767
    4.6.6 双精度浮点类型
        double:64位存储的浮点数
        取值范围:-1.7E308~+1.7E308 ,约有14-15位有效数字
    4.6.7 单精度浮点类型:
        float:32位存储的浮点数
        取值范围:-3.4E38~+3.4E38,有效数据约为6-7位。
    4.6.8 字符类型
        char:16位无符号数字,用于可打印的字符
        1)单个字符:'A'
        2)字符转义序列
           '/n'(换行)
           '/r'(回车)
           '/f'(换页)
           '/b'(退格)
           '/t'(制表符)
           '//'(反斜杠)
           '/'(双引号)
           '/''(单引号)
        3)八进制转义序列:格式为'/nmm'
        4)Unicode转义序列:格式为'/uxxx'
    4.6.9 字符串类型
        String
        字符串直接量时在双引号中的0个或多个字符。    
        使用构造函数创建String类
        String filmstar=new String(nihao);
        String filestar=nihao;
        这两个等价
    4.7 字符串连接
       使用+
    4.8 字符串比较与intern() 方法
       只可以使用if (s1.equals(s2))的方法
       而s1==s2 比较的字符串的地址
       使用intern()方法:返回的所有字符串都可以使用==比较字符串,而且节省空间。

    第五章 名字、数组、运算符与精度
       名字
       表达式
       数组
       运算符
       相关性
       怎样计算精度
       扩宽与窄化转换
       溢出
       Math包
    5.1 名字
       一般格式为:package1.package2.class1.class2
    5.2 表达式
    5.3 数组
        java中数组是对象,java数组动态分配 
        数组下标从0开始     
        1)数组是对象
        2)数组类型是引用类型
        3)数组采用new运算符分配
        4)数组总是分配到堆中,而不是堆栈中
        5)所有数组的父类都是Object。
        数组与对象不同于:
        1)不能把数组作为除Object之外的一些类的子类
        2)数组的语法与其他对象类的语法不同
        3)不能为数组定义自己的方法
        数组的长度即其中的元素数量,是数组类中的一个数据字段,如myArray.length,而不是myArray.length().
        但是,java.lang.String是一个正规的类,它有length()的方法。
    5.3.1 创建数组
        1)不可以:int sprout[256];
           而必须:int sprout[]=new int[256];
        2)当指向对象时,必须:
           Fruit carrot[]=new Fruit[256];
           for (int i=0;i<carrot.length;i++)
             {
              carrot[i]=new Fruit();
             }      
    5.3.2 初始化数组
        byte b[]={1,2,3};
        String wkdays[]={MON,TUE,,,};//初始化列表中允许后面有多余的逗号
        wkdays={mon,tue};//是错误的,不能在声明之外初始化
        wkdays=new String[] {mon,tue};//正确的
        Fruit orchard[]= new Fruit[]{new Fruit,new Fruit(4.3),null};
        java.lang.System类中的方法:arraycopy()用于复制部分或全部数组。
        String midweek[]=new String[3];
        System.arrayCopy(wkdays/*src*/,1/*offset*/,midweek/*dest*/,0/*offset*/,3/*len*/);
        clone()方法创建新的数组,使用clone()方法时,克隆后的对象必须强制转换成正确的类型。
        克隆整个数组
        int p[]=new int[100];
        int p2[]=(int[])p.clone();  

    5.3.3 数组的数组  
         Fruit plums[][];
    5.4 运算符
        instanceof 运算符用于超类,以确定它是否有一个特定的子类对象。
        如:class vehicle {...
           class car extends vehicle {..
           class convertible extends car {..
           vehicle v;
           if (v instanceof convertible)             
    5.5 相关性
        1)优先级
        2)相关性
        3)计算顺序
    5.6怎样计算精度
    5.7 扩宽与窄化转换
    5.8 溢出
        1)整数溢出
        2)浮点溢出
    5.9 Math包
                      

    对 Java 2教程读书笔记 文章的评论    [查看网友评论]

    验证码:
    匿名发表: