从C++转向Java的第一课

时间:2021-11-23 20:10:02

序:计算机语言的学习,最快捷的方法是从一种语言映射到另一种语言。Java和C++作为最通用的面相对象高级语言,不论从语法或者编程上都极具相似性和可效仿行,这里的可效仿包括——语法理解可效仿和编程规范可效仿。本篇将针对Java语言,作重点牵引。

Java开发环境配置

1 安装JDK

版本:jdk1.6.0_27 

配置用户变量:

a.新建 JAVA_HOME

    C:\Program Files (x86)\Java\jdk1.6.0_27 (JDK的安装路径)

b.新建 PATH

    %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

c.新建 CLASSPATH

     .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

配置完成后,cmd 运行java命令看是否成功。

2 安装eclipse

版本:eclipse-jee-juno-win32

解压到安装路径即可。

再谈封装

封装,是面相对象最基本的概念,其意义在于保证某些数据不被外界干扰。C++中也是如此——类。特别要注意的是精准地定义数据的访问权限(public,private,protect)。但是在java中,有一个比类要高大的概念——包。我是这么区分的,类解决了数据对象和操作方法的抽象,而包封装了业务逻辑。类对于java来说,显得更重要,因为java程序的入口就是类,main函数存在类中。

继承和多态

这两个概念基本上和C++是雷同的。

程序的区别

这是两种语言的最大区别:C++是编译型语言,而java是解释型语言。

Javac编译器将.java文件编译成example.class文件,这个文件中包含了程序的字节码,而字节码中包含的是java解释程序将要执行的指令码。所以.class是不能运行的,必须用java解释器去解释。比如java example。

为什么java程序的文件名必须和其public类同名呢?

当java程序被编译后,每个单独的类都被放入自己的.class文件中,运行java解释器实际上是指定想要运行的类的名字,他会自动搜索到包含该名字且带有.class的文件。如果不同名,那将无法找到。

另外,java编译器能编译通过没有main函数的类,但是解释器必须有main函数。

数据类型

Java比C++更加严谨,对数据类型有更高要求,比如java不能讲float赋值给int。不兼容的类型必须作强制转换。

Java的布尔类型为boolean,值为true或者false。

Java不能嵌套声明同一个变量,而这在c++中是允许的。

int x = 1;

{

int x = 2;

}

Java数组运用稍有不同,java的数组需要动态分配。

int month[];

month = new int[12]; // 分配了12个元素,每个元素被初始化为0。

或者

int[] month = new int[12];

Java提供数组边界检测,而这点在C++中是不具备的。如果越界,将爆出如下异常:

java.lang.ArrayIndexOutOfBoundsException

java中没有sizeof函数,数据类型在所有的机器上长度相同。

字符串

字符串在C++中是一种类型,而在java中,它已经不是一种类型,而是一个对象。这点在很多web语言中都是如此,比如JavaScript中,连数组也是一种对象!

最大的区别

Java没有指针概念!为什么呢?为了小应用程序图片防火墙。

eclipse编码快捷排版

快捷方式:Ctrl+Shift+F

java标签运用原则

(1) 一般的continue 会退回最内层循环的开头(顶部),并继续执行。

(2) 带标签的continue 会到达标签的位置,并重新进入紧接在那个标签后面的循环。

(3) 一般的break 会中断并跳出当前循环。

(4) 带标签的break 会中断并跳出标签所指的循环。

再谈this

指向本类对象

再谈static

静态方法就是没有this的方法。在“静态方法”的内部不能调用“非静态方法”3,反过来倒是可以的。而且你可以在没有创建任何对象的前提下,仅仅通过类本身来调用静态方法。这实际上正是静态方法存在的主要原因。它很象是C语言中的全局函数。Java中禁止使用全局函数,但你在类中置入静态方法就可以访问其它静态方法和静态字段。

类的静态变量

类的静态变量是该类所有对象共用的同一个成员变量。

类的静态方法

静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。 

资源释放

1. 对象可能不被回收。

2. 垃圾回收并不等于“析构”。

3.垃圾回收只与内存有关。

final

java中的final修饰词类似于c++中的const变量。

函数

随机数函数

import java.util.*;

int i = rand.nextInt(100); // 取100以内的随即整数

在Math.random()的输出中包括了0.0,用数学语言,输出值范围是[0,1)

比较函数==和equals()的区别

equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。

implements接口实现

implements是一个类实现一个接口用的关键字,他是用来实现接口中定义的抽象方法。比如:people是一个接口,他里面有say这个方法。
public interface people()
{
   public say();
}
但是接口没有方法体。
只能通过一个具体的类去实现其中的方法体。
比如chinese这个类,就实现了people这个接口。
 public class chinese implements peopel{
   public say()
   {System.out.println("你好!");}
}

包——java新概念

包——程序库单元

import packagename;

比如java发布的utility程序库

import java.util.*;

这样就可以使用该包下的所有类

请注意,Java 包的命名规则全部使用小写字母,包括中间的字也是如此。

声明一个包的语句如下

package mypackage;

之后,要使用该包的类,必须先import该包。

你在创建自己的包时,将会发现 package 语句必须是文件中的第一行非注释程序代码。

如果A和B包中都有class1这个类名,则使用时,需带前缀

A.class1 obj = new A.class1();

有了包的概念,则我们可以定制自己的程序库了。

再谈访问权限

public, protected 和private

不同点:

c++可以延续之前的权限设置,而java必须在每一处定义的地方加上权限声明。

三个权限的使用方法和c++中的基本雷同。

 

转自:http://www.cnblogs.com/viviman/archive/2013/01/09/2853150.html