代码改变世界

初学Java作业0911

2016-09-11 15:12  宇航员舒克  阅读(234)  评论(0编辑  收藏  举报

1.Java为什么能跨平台运行?请简述原理。

Java语言自带Java虚拟机JVM,在JVMJava源文件会被解释编译成.class文件,.class文件可以在Java虚拟机JVM中运行并不在本地操作系统中运行,所以Java虚拟机JVM在不同的操作系统中与不同操作系统交互解释给本地操作系统执行Java语言。

此外光有JVM还不能生成.class文件还需要有JREJava运行环境),(在JDK的目录下有个JRE目录,里面包含有binlib。)因为在解释生成.class文件时还需要调用解释所需的类库lib。所以,此时JVM(相当于bin)与liblibJVM工作所需要的类库)合起来被称为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时环境变量pathJAVA_HOME的作用是什么? 

1.JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您的 JDK安装在d:\jdk1.6.0_23这个目录下,请您查看一下这个目录下是不是有一个子目录binbin目录中是不是有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变量的一部分,目的是为了能够通过命令行运行javacjava命令成为可能,当你在命令行中输入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.整数:

byte1字节)、short2字节)、int4字节默认类型)、long(后加L8字节)

注意:Java默认是int型,long型使用时后加L或者l,后如果不加L则表示int型。

2.浮点型:

浮点型:float(后加F4字节)、double(默认类型,8字节)。

3.字符型:

1char

书写格式:单引号括起来内容。egchar a =b’;

注意:charint是兼容性可以相互转换。 egchar a=123;原因:每个数字在字符集中都有相应的字符对应。目前有UTF-8ASCII,GB2312GBK等字符集。

2)转译字符:\+...  eg:  \n  \r \t  \\ 等等

4.布尔型(boolean): true false

                   数据类型之间的转换:

1)转换前提是相互转换的内容要兼容。

2)隐式转换:小范围可以直接转换为大范围,运算时自动把结果转化为范围大的。

       char--int

byte--short--int--long--float--double    (byte/short/char不会相互转换,他们先转化int)

3)强制转换:大范围转小范围,必须声明(.....=(要转换的类型)被转换的变量值)。egint a=int12313L

4)基本数据类型与字符串进行+运算时会自动转成字符串进行连接。

5.引用数据类型:类、数组

 

 10.查询字符集的相关知识

  各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些   ANSI 编码标准所规定的内容包含两层含义:

  1. 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。

  2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
  各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了     有“字符的集合”这层含义外,同时也包含了“编码”的含义。

  “UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle,   UnicodeBig 等。

  1ISO-8859-1
  最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6, 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6,   0x00D0] 两个 UNICODE 字符,即 "ÖÐ"
  反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。

  2GB2312,BIG5,Shift_JIS,ISO-8859-2
  把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。 反之,将字节串      转化成字符串时,也可能多个字节转化成一个字符。比如,[0xD6, 0xD0] 这两个字节,通过 GB2312 转化为字符串时,将得到 [0x4E2D] 一个字符,即   ''         字。

  “ANSI 编码”的特点:

  1. 这些“ANSI 编码标准”都只能处理各自语言范围之内的 UNICODE 字符。

  2. UNICODE 字符”与“转换出来的字节”之间的关系是人为规定的。

  3UTF-8,UTF-16,UnicodeBig
      与“ANSI 编码”类似的,把字符串通过 UNICODE 编码转化成“字节串”时,一个 UNICODE 字符可能转化成一个字节或多个字节。

  与ANSI 编码”不同的是:

  1. 这些“UNICODE 编码”能够处理所有的 UNICODE 字符。
  2. UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。

 

  ISO8859-1,通常叫做Latin-1Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。
  而gb2312是标准中文字符集。 GB2312GBK的子集,GBKGB18030的子集, 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种基本数据类型的变量并赋值,练习数据类型