序:计算机语言的学习,最快捷的方法是从一种语言映射到另一种语言。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++中的基本雷同。