1.Java为什么能跨平台运行?请简述原理。
Java语言自带Java虚拟机JVM,在JVM中Java源文件会被解释编译成.class文件,.class文件可以在Java虚拟机JVM中运行并不在本地操作系统中运行,所以Java虚拟机JVM在不同的操作系统中与不同操作系统交互解释给本地操作系统执行Java语言。 此外光有JVM还不能生成.class文件还需要有JRE(Java运行环境),(在JDK的目录下有个JRE目录,里面包含有bin和lib。)因为在解释生成.class文件时还需要调用解释所需的类库lib。所以,此时JVM(相当于bin)与lib(lib是JVM工作所需要的类库)合起来被称为JRE。 例如:如果把自己写的.class文件和JRE文件一起打包发给其他人就可以运行你的程序了。 |
2.请尝试安装和配置JDK,并给出安装、配置JDK的步骤。
安装步骤: 1.在官网下载对应自己电脑系统(32位或64位)的JDK安装包。 2.根据提示一步步安装即可(基本一直点下一步) 配置JDK步骤: 1.用鼠标右击“我的电脑”,选择“属性”->“高级”->“环境变量”->“系统变量”->“新建”。 2.在“变量名”输入框中写入“java_home”,在“变量值”输入框中写入“C:\Program Files\Java\jdk1.6.0” (根据安装路径填写),然后点击“确定”,java_home就设置完成了。如下图 3.下面开始“classpath”的配置。选中“系统变量”查看是否有classpath项目,如果没有就点击“新建”,如果已经存在就选中classpath选项,点击“编辑”按钮,然后在“变量名”中填写“classpath”,在“变量值”中填写“C:\Program Files\Java\jdk1.6.0\jre\lib”(根据安装路径填写) 4.现在可以进行“path”的配置了。同上在“classpath”设定时类似,“变量名”输入框填写“path”,“变量值”输入框填写“C:\Program Files\Java\jdk1.6.0\bin”(根据安装路径填写)
|
3.请问配置JDK时环境变量path和JAVA_HOME的作用是什么?
1.JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您的 JDK安装在d:\jdk1.6.0_23这个目录下,请您查看一下这个目录下是不是有一个子目录bin,bin目录中是不是有java.exe这个文件,如果 是,那么您的JAVA_HOME环境变量的内容应该为d:\jdk1.6.0_23。那么我们设置这个环境变量的作用是什么呢?就单独的java开发而言,这个 环境变量并没有任何作用,这就是很多根据书上的描述设置好之后,把一本书学完也没有用到这个变量,所以很是不理解。其设置JAVA_HOME的好处:就是当你的系统中重新安装JDK,并改变过目录的话,你只要修改 JAVA_HOME的内容就可以了,PATH则不需要修改。此外,JAVA_HOME变量还会有一些其他用途,比如Eclipse这个IDE,它本身是由 java程序编写的,那么在运行的时候必然需要虚拟机的存在,所以Eclipse在启动时需要查找虚拟机,如果有JAVA_HOME这个变量,那么 Eclipse就会利用这个变量找到虚拟机的路径。所以虽然开始JAVA_HOME环境变量可以不设置,但是还是建议大家为以后考虑而设置上。 2.PATH环境变量,我们为了能够编译和运行java程序,需要在PATH环境变量中把java.exe所在的目录设置为 PATH变量的一部分,目的是为了能够通过命令行运行javac和java命令成为可能,当你在命令行中输入javac ...或者java ...的时候,如果提示你一个错误:'javac' 不是内部命令或外部命令,也不是可运行的程序或批处理文件。这时候说明操作系统没有找到你通过命令行输入的javac这个命令,为什么呢?因为操作系统并 不知道你的javac.exe这个文件在哪里,所以无法执行对应的文件。那么为了能够让操作系统找到这个可执行文件,我们就需要把javac.exe这个 可执行文件所在的目录作为PATH环境变量的一部分设置起来,这样当你在命令行输入一个命令的时候,操作系统就会自动搜索PATH变量中所指定的所有目录 了。PATH变量是系统的管道符变量。在Windows系统中PATH变量中的所有路径采用分号分割,如果在Linux系统中采用冒号分割。 |
以下4-7题请在JDK环境下编译和运行。
4.利用文本编辑器输入课堂上练习的Hello.java,并在JDK环境下编译和运行。请将程序编译、运行的结果截图,填入下框中。
|
5.如果第4题中在DOS命令下输入:java Hello出现以下结果:Bad command or the file name可能是什么原因?请说明理由。
没有这个命令或文件名 原因可能是没有成功安装JDK或者没有配置好JDK 的环境变量,或者没有编译相应的文件。
|
6.如果第4题中在DOS命令下输入:java Hello出现以下结果:Exception in thread “main” java.lang.NoClassDefFoundError: Hello
可能是什么原因?请说明理由。
可能是没有定义类,直接写进main的字节码中。 |
7.在第4题中Hello.class所在路径下,输入命令:java Hello.class,会出现什么结果,为什么?
|
没有Hello.class文件 |
8.请描述基本数据类型和引用数据类型的区别?
结合上图分析:基本数据类型与引用类型的区别: 1.内存使用 基本数据类型直接存储在栈内存。 引用数据类型存储在堆内存,在栈内存存放的是首地址。 2.变量赋值 基本数据类型把值赋给新变量。 引用数据类型把首地址赋给新变量。
|
9.Java主要有那几种文件类型?各自的作用是什么?
主要分为:基本数据类型和引用数据类型 一:基本数据类型: .数值型:整数,浮点型(小数) 1.整数: byte(1字节)、short(2字节)、int(4字节默认类型)、long(后加L,8字节) 注意:Java默认是int型,long型使用时后加L或者l,后如果不加L则表示int型。 2.浮点型: 浮点型:float(后加F,4字节)、double(默认类型,8字节)。 3.字符型: (1)char 书写格式:单引号括起来内容。eg: char a =‘b’; 注意:char和int是兼容性可以相互转换。 eg:char a=123;原因:每个数字在字符集中都有相应的字符对应。目前有UTF-8,ASCII,GB2312,GBK等字符集。 (2)转译字符:\+... eg: \n 、 \r 、 \t 、\\ 等等 4.布尔型(boolean): true false 数据类型之间的转换: (1)转换前提是相互转换的内容要兼容。 (2)隐式转换:小范围可以直接转换为大范围,运算时自动把结果转化为范围大的。 char--int byte--short--int--long--float--double (byte/short/char不会相互转换,他们先转化int型) (3)强制转换:大范围转小范围,必须声明(.....=(要转换的类型)被转换的变量值)。eg:int a=(int)12313L; (4)基本数据类型与字符串进行+运算时会自动转成字符串进行连接。 5.引用数据类型:类、数组
|
10.查询字符集的相关知识
各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义:
1. 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了 有“字符的集合”这层含义外,同时也包含了“编码”的含义。
“UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。
1、ISO-8859-1:
最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6, 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符,即 "ÖÐ"。
反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。
2、GB2312,BIG5,Shift_JIS,ISO-8859-2
把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。 反之,将字节串 转化成字符串时,也可能多个字节转化成一个字符。比如,[0xD6, 0xD0] 这两个字节,通过 GB2312 转化为字符串时,将得到 [0x4E2D] 一个字符,即 '中' 字。
“ANSI 编码”的特点:
1. 这些“ANSI 编码标准”都只能处理各自语言范围之内的 UNICODE 字符。
2. “UNICODE 字符”与“转换出来的字节”之间的关系是人为规定的。
3、UTF-8,UTF-16,UnicodeBig
与“ANSI 编码”类似的,把字符串通过 UNICODE 编码转化成“字节串”时,一个 UNICODE 字符可能转化成一个字节或多个字节。
与“ANSI 编码”不同的是:
1. 这些“UNICODE 编码”能够处理所有的 UNICODE 字符。
2. “UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。
ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。
而gb2312是标准中文字符集。 GB2312是GBK的子集,GBK是GB18030的子集, GBK是包括中日韩字符的大字符集合,如果是中文的网站推荐GB2312,GBK有 时还是有点问题。
UTF-8 是 UNICODE 的一种变长字符编码,即 RFC 3629。简单的说——大字符集。可以解决多种语言文本显示问题,从而实现应用国际化和本地化。对系统 来讲,UTF-8 编码可以通过屏蔽位和移位操作快速读写,排序更加容易。UTF-8 是字节顺序无关的,它的字节顺序在所有系统中都是一样的。因此 UTF-8 具有 更高的性能。为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便。使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体 中文支持就能正常观看你的文字而不会出现乱码。
不过如果是纯英文的话,用什么都可以,用GB2312也没问题。
以下题目请在Eclipse环境下编译和运行。
11.编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。
12.编写一个Java项目,定义包,在包下定义包含main方法的类,在main方法中声明8种基本数据类型的变量并赋值,练习数据类型