java 编程笔记

来源:互联网 发布:广东裤哥战哭淘宝女郎 编辑:程序博客网 时间:2024/06/18 00:39
JAVA并不只是一种语言,而是一个完整的平台,有一个庞大的库,其中包含很多可以重用的代码和一个提供诸如安全性,跨操作系统的可移植性以及自动回收等服务的执行环境。
      JAVA的强大功能主要分为十大部分:
    (一)简单性
    (二)面向对象(OOP)
   (三)分布式 
    (四)健壮性
   (五)体系结构化
   (六)可移植性
    (七)解释性
   (八)高性能
   (九)多线程
   (十)动态性 

    下面来分享对每个功能的看法:
     (一)简单性:
      JAVA语言符合当今标准惯例,尽可能接近C++,剔出了C++中很少使用难以理解,易混淆的特性。 JAVA的语法是C++语法的“纯净版”,没有头文件、指针运算、结构运算、联合操作符重载,虚基类等等。 

    (二)面向对象(OOP)
     JAVA的面向对象特性与C++旗鼓相当,主要不同点在于多继承,在JAVA中取而代之的是接口的概念,以及JAVA的元类 metaclass模型。 JAVA的面向对象(OOP)的三个特征包括:封装,继承,多态(以及:抽象,接口)。   
     封装即对属性和方法封装起来。 封装其实就是面向对象语言的精髓,在这里一些都是对象,我们通过封装,只为用户提供接口,而隐藏了内部的具体实现。下面我用一个例子来说明:先举几个简答的例子来说明:生活中的封装:插板,你看那些插孔就是提供给外界的接口,任何电器厂商的插头都按照那个插孔来实现,而不管插板内部是怎么做的。
程序中的简单封装。比如:我们做一个加减乘除的四则运算,那么我们只需要对外界提供四个方法,用户只需要调用方法传入正确的参数,我们的程序就能给出正确答案,用户根本不知道我们内部是怎么实现。

     继承即派生类继承基类(子类继承父类)。a.类的继承是通过关键字extends来实现,类只能单一继承,这里所说的单一继承,也就是说一个类同时只能继承一个类,例如:有类A和B,现在类C不能同时继承A与B(也就是extends后面不能有两个),但却可以这样:类B继承了类A,类C又继承了类B
b. 子类中就是继承父类里的变量和方法(注意:是不是真的能继承,还看父类变量和方法的访问修饰符是什么,例如private修饰的变量和方法就不能继承)。
c.父类的构造凼数没有被继承,这里所说的意思是指在实例化子类的对象时,在new后面不能调用父类的构造凼数,但是可以在子类的构造凼数里使用super来调用父类的构造凼数,如果没有写super这句调用,子类会自动调用父类无参的构造凼数(但要确保无参构造凼数存在,否则会出错)
d. 可以new一个子类的对象赋给一个父类的变量,当通过这个父类的变量执行方法时,其实是执行的子类的方法。

       多态,我觉得它的作用就是用来将接口和实现分离开,改善代码的组织结构,增强代码的可读性。
以下是我对多态的认识:
1.Java中除了static和final方法外,其他所有的方法都是运行时绑定的。在我另外一篇文章中说到private方法都被隐式指定为final的,因此final的方法不会在运行时绑定。当在派生类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。
2.在派生类中,对于基类中的private方法,最好采用不同的名字。
3.包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作为基类的角色,为不同的子类提供通用的接口。
4.对象清理的顺序和创建的顺序相反,当然前提是自己想手动清理对象,因为大家都知道Java垃圾回收器。
5.在基类的构造方法中小心调用基类中被重写的方法,这里涉及到对象初始化顺序。
6.构造方法是被隐式声明为static方法。
7.用继承表达行为间的差异,用字段表达状态上的变化。

为了给你讲明白,我再给你写个例子


public Class Parents {

public void print() {

System.out.println(“parents”);

}

}



public Class Father extends Parents {

public void print() {

System.out.println(“father”);

}

}

public Class Mother extends Parents {

public void print() {

System.out.println(“mother”);

}

}



public Class Test {

public void find(Parents p) {

p.print();

}

public static void main(String[] args) {

Test t = new Test();

Father f = new Father();

Mother m = new Mother();

t.find(f);

t.find(m);

}


     最后的输出结果分别是father和mother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用那个派生类的方法,就是因为程序在运行时进行了绑定。 

 (三)分布式

      JAVA有一个扩展例程库,用于处理像HTTPFTP这类的TCP/IP协议,Java应用程序能够通过URL

打开和访问网络上的对象,其便利程度如同访问本地文件系统一样。

 (四)健壮性

     Java的设计目标之一在于使用Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的问题检测,后期动态的检测,并消除了有出错倾向的状态,JavaC++最大的不同在于Java

采用的指针模型可以消除重写内存和损坏数据的可能性。

 (五)体系结构化

      编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,就可以在许多处理器上运行。Java编译器通过生成于特定的计算机体系结构无关的字节码来实现这一特性,可以在任何机器上被解释执行,而且可以迅速的翻译成本地机器代码。虚拟机有个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译。

    (六)可移植性

     JAVA和CC++不同,Java规范中没有“依赖具体实现”的地方。字符串使用的是Unicode格式存储的。

  (七)解释性

        Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个更加增量且简便的过程,所以开发过程中也变得更加快捷,更加具有探索性。

   (八)高性能
      即时编译器,基本工作方式是一次把字节码编译为本地代码,并将结果缓存起来,在需要的时候重新调用。由于这种方式只需要一次解释,从而提高了常用代码的运行速度。

 (九)多线程
      只要操作系统支持,Java中的线程就可以利用多个处理器,Java把多线程的实现交给了底层的操作系统和线程库来完成。

(十)动态性

当需要将某些代码添加到正在运行的程序中,动态性将是一个非常重要的特性。在Java中找出运行时刻类型信息十分直观。

内部类

  • 内部类与组合是完全不同的概念,这一点很重要。
  • 为什么需要内部类? — 主要是解决了多继承的问题,继承具体或抽象类

    • 一般来说,内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外围类的对象。所以可以认为内部类提供了某种进入其外围类的窗口。
    • 内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
    • 如果没有内部类提供的、可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效的实现了“多重继承”。也就是说,内部类允许继承多个非接口类型。

    考虑这样一种情形:如果必须在一个类中以某种方式实现两个接口。由于接口的灵活性,你有两种选择:使用单一类或者使用内部类。但如果拥有的是抽象的类或具体的类,而不是接口,那就只能使用内部类才能实现多重继承。

使用内部类,还可以获得其他一些特性:
- 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。
- 在单个外围类中,可以让多个内部类以不同的方式实现同一个接口或继承同一个类。
- 创建内部类对象的时刻并不依赖于外围类对象的创建。
- 内部类并没有令人迷惑的is-a关系,它就是一个独立的实体。


0 0
原创粉丝点击