分享

Java笔记(一)

 依笑乘風涼 2007-05-09

Java笔记(一)

JDK  Java Develop Kit 即Java开发工具包

J2SDK Java2 Software Develop Kit Java软件开发包

JRE Java Runtime Environment 即Java运行环境,通常已包含在J2SDK中了.如果我们仅仅是为了运行Java程序,而不是从事Java开发,我们可以直接下载JRE,在我们的程序上安装

Java开发工具包(JDK)分为三个版本:J2SE J2EE J2ME

Java代码是解释执行的,我们使用Java编译器将Java代码编译成字节码,这是一种中间代码,然后由Java解释其解释执行。而C++程序是编译执行的,C++程序代码被编译为本地机器指令,然后执行

Java语言的一个重要特性就是在语言级支持多线程的程序设计。

Java是动态的,其动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是我们采用C++语言进行面向对象程序设计所无法实现的。

Java跨平台的原理:通过Java虚拟机(JVM)来实现的。
    Java应用程序的开发周期包括编译、下载、解释和执行几个部分。
    Java编译程序(javac.exe)将Java源程序翻译为JVM可执行代码——字节码,Java编译器不将对变量和方法的引用编译为数值引用,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。
    运行JVM字节码的工作是由解释器(java.exe)来完成的。解释执行过程分三步进行:代码的装入(由类装载器完成)、代码的效验和代码的执行
    Java的平台独立性是以JVM为基础的,但JVM不是跨平台的

j2sdk文件夹下
    bin(binary二进制):放的是java的可执行程序
    demo:sun公司提供的一些例子程序
    lib:类库和一些jre,java运行时的环境

比如一个编译单元中有个public类welcome,编译(javac,编译的是原文件)完成后生成了welcome.class文件,当用解释器命令Java welcome时,不是加载welcome.class这个文件,而是加载welcome这个类
 
/* */注释程序段  //单行注释 /** */生成注释文件
 
UltraEdit下的java文件,变红色的是个类,比如:System就是个类,out是个对象,println是个方法,打印完后面的字符串后换行,print方法不换行,java中\n也表示换行
 
    一维数组:在C中,可以这样定义数组:int num[3],但在java中,数组在定义的时候是不能够分配空间的,所以在[]里面不能写空间大小。可以如下定义:
int[] num; num=new int[3]  或  int[] num=new int[3]以给数组分配大小。
可以定义同时初始化:int[] num={1,2,3}
但int[] num;num={1,2,3}//error
也可以int[] num=new int[]{1,2,3}
int[] num=new int[3]{1,2,3}//error
 
    二维数组:int [][] num;num=new int[3][4]
还可以这样(每行分配不同长度):int [][] num;
                                num=new int[3][];
                                num[0]=new int[5];
                                num[1]=new int[3];
                                num[2]=new int[2];
可以这样int [][] num={{1,2,3},{4,5},{6}}
 
java中移位运算符:<<左移 >>带符号右移 >>>无符号右移 x<<2左移两位 左移一位乘以2,右移一位除以2
 
要查一个方法的时候首先要知道方法所在的包名,比如java.lang,包下面是类库中的类,java中所有基本数据类型都有相对应的类,比如Integer、double、float、Character
 
类是创建对象的模板,对象是类的实例。类实质上定义的是一种数据类型,这种数据类型就是对象类型。所以我们可以使用类名称来声明对象变量。声明对象变量后,还不能使用对象。必须用运算符new创建对象实体之后,才能使用对象。
例如:有一个类Point
 Point pt; //声明对象
 pt=new Point();//常见对象实体
 pt.x……
 
类的构造方法:
  构造方法的名字和类名相同,并且没有返回值
  构造方法主要用于为类的对象定义初始化状态
  我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创加类的实例
  java的类都要求有构造方法,如果没有定义构造方法,java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员变量。但只要类中自己提供了构造函数,那么java就不会提供缺省的构造方法。
各种数据类型的默认值为:数值型 0;boolean false; char ‘\0‘; 对象 null;
 
new关键字的作用:
  为对象分配内存空间
  引起对象构造方法的调用
  为对象返回一个引用
 
反编译工具javap.exe会将成员变量和成员方法的信息打印出来,它加载的是类
 
方法的重载的构成条件:方法名相同,但参数类型或参数个数不同
 
特殊变量this
  this变量代表对象本身
  当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量
  使用this简化构造函数的调用。例如:
  class Point
{
   int x,y;
   Point(a,b)
   {
      x=a;
      y=b;
   }
   Point()
   {
     this(1,1)  //会调用带参数的构造函数
   }
   void output()
   {
      System.out.println(x);
      System.out.println(x);
   }
   public static void main(String[] args)
     {
     Point pt;
     pt=new Point();
     pt.output();
     }
}
 
一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象。而数据成员在类的每个对象所在内存中都存在着一份拷贝。this变量允许相同的实例方法为不同的对象工作。每当调用一个实例方法时,this变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据建立关联
 
关键字static
    静态方法和静态变量是属于某一个类,而不属于类的对象
    静态方法和静态变量的引用直接通过类名引用
    在静态方法中不能调用非静态的方法和引用非静态的成员变量。但反之,可以
    可以用类的对象obj去调用静态的方法method(),如obj.method()
    类变量和类方法在类加载的时候也被加载并分配了内存空间
 
常量的定义
    使用关键字final定义常量(其值在运行时不能改变):final double PI=3.1415926
    作为一种约定,在定义常量时,通常采用大写形式
    final常量可以在声明的同时赋初值,也可以在构造函数中赋初值(若为static常量则不可)
    为了节省内存,我们通常将常量声明为静态的(static):static final double PI=3.1415926
在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类):class Fish extends Animal

在Java中,不允许多继承。构造方法是不能被继承的
 
在子类中定义一个与父类同名、返回类型、参数类型均相同的一个方法,称为方法的覆盖。覆盖发生在子类与父类之间
 
特殊变量super:
    特殊变量super,提供了对父类的访问
    可以使用super访问父类被子类隐藏的变量或覆盖的方法
    每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错
 
多态性
    通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。若将子类对象的引用传递给声明为父类的参数,若子类有这个方法,就调用子类的方法,若子类没有这个方法,就调用父类的方法
 
instanceof:判断一个对象是否是一个类的实例:if(an instanceof Animal)……

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多