Java语法和J2EE概念

来源:互联网 发布:淘宝卖家云标签 编辑:程序博客网 时间:2024/06/04 16:44
★Java和C++区别
Java语言让编程者无法找到指针来直接访问内存,并且增添了自动的内存管理功能。
Java不支持多重继承,但允许一个类继承多个接口。
Java除了基本数据类型之外,其余的都作为类对象,包括数组。并取消了c/c++中的结构和联合。
Java程序中所有的对象都是用new操作符建立在内存堆栈上。
Java不支持操作符重载。
Java不支持预处理功能。
Java不支持缺省函数参数。
Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。


★Java和C++的语法对比学习
1) main 函数
<C++>
//自由浮动的函数
int main( int argc, char* argv[])
{
    printf( "Hello, world" );
}
<Java>
// 每个函数都必须是一个类的一部分;当java <class>运行是一个特定类的主函数会被调用
// (因此你可以让每个类都有一个main函数,这在写单元测试是很有用)
class HelloWorld
{
    public static void main(String args[])
    {
        System.out.println( "Hello, World" );
    }
}








2) 类的声明
除了 java 不要求用分号外几乎是相同的。 
<C++>
    class Bar {};
    
<Java>
    class Bar {}
    


3) 方法声明
   都相同的, 除了在java中方法必须总是某个类的一部分,并且可能public/private/protected 作为修饰.且一般java中不会在类内只声明成员函数,而总是直接在类中实现成员函数。




4) 构造函数和析构函数
构造函数都是相同的 (即类的名字), java没有准确意义上的的析构函数 


5) 静态成员函数和变量
方法声明是相同的, 但 java 提供静态初始化块来来初始化静态变量 (不需要在源文件中声明): 
class Foo 
{
    static private int x; //也可以定义时赋值初始化
    // 静态初始化块
    { x = 5; }
}
调用方法也不相同
<C++>
myClass::staticVar;
myClass::staticfun();
<Java>
myClass.staticVar;
myClass.staticfun();


6) 对象的声明
<C++>
    // 在栈中
    myClass x;
 
    //或者在堆中
    myClass *x = new myClass;
    
<Java>
   // 总是在对堆中声明
   // java中myClass x只是声明了对象,而不会为对象分配空间
   // 对象名只是内存地址的标志,所以使用new分配空间时不用使用指针
    myClass x = new myClass();
    








7) 继   承
<C++>
    class Foo : public Bar
    { ... };
    
<Java>
    class Foo extends Bar //只能公有继承
    { ... }
    




8) 类中修饰符 
使用格式不一样。此外,java多了一个private protected修饰,相当于c++中的protected修饰。java中的protected修饰可以被同包中的其他类访问。
<C++>
   public: 
        void foo();
        void bar();
    
<Java>
    public void foo(){};
    public void bar(){};
    




9) 虚函数
<C++>
    virtual int foo(); // 或者非虚函数写作 int foo();
    
<Java>
    // 函数默认的就是虚函数; 用final关键字防止重载
    int foo(); // 或者, final int foo();








10) 内存管理
大体上是相同的。使用new 来分配, 但是 java没有 delete,因为它有垃圾回收器。 


11) NULL vs null
<C++>
    // 初始化一个指针为 NULL
    int *x = NULL;
    
<Java>
   // 编译器将捕获使用未初始化的引用
   //但是如果你因需要初始化一个引用而赋一个null,那么这是无效的
    myClass x = null;
    




12) 基本数据类型
java有一点罗嗦: 你必须写 boolean而不止是 bool. 
java还支持byte类型,相当于c++的char类型,都是1个字节的有符号数。java中的char类型则是2个字节的无符号数。
<C++>
   bool foo;
<Java>
     boolean foo;




13) 常   量
<C++>
    const int x = 7;
    
<Java>
    final int x = 7;
    




14) 抛异常
首先,java在编译器强制抛异常—如果你的方法可能会抛异常你必需明确报告。 
java中凡是定义中已声明会抛出例外的方法,在调用时必须捕捉这种例外,否则编译器会报错。
<C++>
     int foo() throw (IOException)
<Java>
     int foo() throws IOException




15) 数   组
<C++>
    int x[10];
    // 或
    int *x = new int[10];
    // 使用 x,然后归还内存
    delete []x;
    
<Java>
    int[] x = new int[10]; //也可以写成int x[],不过前者更常用
    // 使用 x, 内存有垃圾回收器回收或
    //或在程序生命周期尽头归还给系统
    




16) 集合和迭代器
<C++>
迭代器是类的成员。范围的开始是<容器>.begin(), 结束是 <容器>.end()。 用++ 操作符递增,  用 *操作符访。 
    vector myVec;
    for ( vector<int>::iterator itr = myVec.begin();
          itr != myVec.end();
          ++itr )
    {
        cout << *itr;
    }
    
<Java>
迭代器只是一个接口。 范围的开始是 <集合>.iterator,你必须用itr.hasNext()来查看是否到达集合尾。 使用itr.next()(是在c++中使用操作符++ 和*操作的结合)来获得下一个元素。 
    ArrayList myArrayList = new ArrayList();
    Iterator itr = myArrayList.iterator();
    while ( itr.hasNext() )
    {
        System.out.println( itr.next() );
    }
 
    // 或, 在java 5中
    ArrayList myArrayList = new ArrayList();
    for( Object o : myArrayList ) {
        System.out.println( o );
    }
    
 


    
17) 抽象类
<C++>
    // 只需要包含一个纯虚函数
    class Bar { public: virtual void foo() = 0; };
    
<Java>
    // 语法上允许显示的声明!
    abstract class Bar { public abstract void foo(); }
 
    // 或者你也可以声明一个接口
    interface Bar { public void foo(); }
 
    // 然后让一个类继承这个接口:
    class Chocolate implements Bar
    {
        public void foo() { /* do something */ }
    }
    
18) 引用 vs  指针
<C++>
    //引用不可改变,通过使用指针来获得更多的灵活性
    int bar = 7, qux = 6;
    int& foo = bar;
    
<Java>
    // 引用是可变的,仅存储对象地址; 
    //没有指针类型
    myClass x;
    x.foo(); // error, x is a null ``pointer''
 
    // 注意你要总是用 . 来访问域
    
19) 编  译
<C++>
    // 编译
    g++ foo.cc -o outfile
    // 运行
    ./outfile
    
<Java>
   // 编译foo.java文件中的类成<classname>.class    javac foo.java 
    // 通过调用<classname>中的静态main方法来运行
    java <classname>
    
20) 注   释
两种语言是一样的 (// 和 /* */ 可以用) 


★J2EE概念
J2EE是网络应用的一个集成框架,能够满足低费用,高可用性,高可靠性以及扩展性的应用需求。它通过提供一个统一的开发平台,降低了开发多层应用的费用和复杂性,对现有应用程序集成提供了强有力的支持。
J2EE将电子商务应用分为4个层次,即客户层,Web层,业务层,企业信息系统层。其中,客户层可以使用浏览器访问Web层,或使用客户端程序直接访问业务层。JSP脚本和Servlet运行在Web层,接收浏览器请求,和运行在业务层的EJB进行必要的交互后返回标准的HTML页面。


目前常见的动态网页技术有4种:
CGI:用户可以使用多种语言如C/C++,VB等编写适合的CGI程序,然后放在Web服务器上运行,接收请求并处理返回结果。
ASP:没有自己专门的编程语言,而是使用VBScript,JavaScript等脚本来编写ASP的应用程序,可以嵌入HTML文件中。
PHP:是一种服务器端脚本语言,也是嵌入HTML文件的一种脚本语言。
JSP:它使用Java语言或JavaScript脚本作为编程脚本,可以嵌入HTML文件中。


J2EE相关概念:
Applet:是使用Java语言编写的小程序,但是不能独立运行,而必须嵌入HTML文件中在浏览器里执行。功能类似于JavaScript脚本,在客户端实现动态网页。
Servlet:使用Java语言编写,运行于服务器端实现动态网页,是一种跨平台的纯Java服务器端程序,类似于CGI程序。
JEB:Java Beans也是一些Java类,通常用来实现一些比较常用的功能,并便于重用或插入其他应用程序中,所有遵循一定编程原则的Java类都可以被称为Java Beans。JEB即Enterprise Java Beans,是一种非常复杂的Java Beans。它定义了一些特定的方法和属性来实现企业的核心业务逻辑。
JSP:在服务器端,JSP会被Java虚拟机处理编译成一种Servlet,然后再由虚拟机来执行此Servlet来生成纯HTML页面信息。所以JSP是对Servlet的一种抽象,并没有增加任何在本质上不能用Servlet来实现的功能。但JSP可以嵌入HTML文件中,有动静分离,简单易用等优点。

















































原创粉丝点击