您的位置:首页 > 编程语言 > Java开发

你必须知道的261个Java语言问题笔记-Java基本概念及环境配置

2017-08-06 17:52 706 查看
什么是面向对象程序设计

程序设计从开始到现在,大致经历了过程式程序设计、结构化程序设计和面向对象设计3个阶段。

过程式程序设计需要开发者对程序开发者对程序的每一步进行精确地设计和严格控制。

结构化程序设计需要开发者在编码之前将程序进行完整规划,设计出各种图表,画出各种数据的流向,

指明各个函数之间的相互作用,是一种自顶向下、逐步求精、使程序结构模块化的程序设计方法。

面向对象程序设计(OOP)是将对象作为程序的基本单元,并将程序和数据封装在其中,以提高软件的

重用性、灵活性和扩展性,每一个对象都代表现实世界中的一个具体事务(或者称为"实体")。

面向对象程序设计的基本特征

面向对象程序设计的基本特征是封装、继承和多态。

JAVA语言的运行机制

计算机高级编程语言按程序的执行方式可分为编译型语言和解释型语言。

编译型语言会在程序第一次执行时将其全部编译成与当前系统平台对应的机器指令,在后续执行时,

直接运行第一次编译的结果,减少了编译次数,提高了程序运行效率,但是程序在第一次编译时与

系统平台相对应,因此移植性比较差。

解释性语言在程序每次运行时都要将源程序解释成当前系统平台相对应的机器指令,因此每一次

运行都需要解释并执行,运行效率较低,但是移植性强。

java语言综合了编译型和解释性语言的优点,采用了一种折中方案。即java语言首次运行时采取编译

机制将java源程序编译成java字节码文件,该字节码与系统平台无关,是介于源代码和机器指令之间

的一种状态。在后续执行时,采取解释机制将java字节码解释成与系统平台对应的机器指令。这样既

减少了编译次数,又增强了程序的可移植性,因此被称为“一次编译,多处运行”。

什么是JVM?有什么作用?工作机制如何?

JVM定义:

JVM(java Virtual Machine)意思是java虚拟机。JVM有自己完善的硬件架构,例如处理器、堆栈和

寄存器等,还具有相应的指令系统。

JVM作用:

JVM是java字节码执行的引擎,为java程序的执行提供必要的支持,它还能优化java字节码,使之转

换成效率更高的机器指令。JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的。Class

Loader是java运行时一个重要的系统组件,负责在运行时查找和装入类文件的类。

JVM工作原理:

JVM在整个JDK中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的java

运行环境。操作系统装入JVM是通过JDK中java.exe来实现,主要通过以下几个步骤完成。

创建JVM装载环境和配置;

装载jvm.dll;

初始化jvm.dll;

调用JNIEnv实例装载并处理class类;

运行java程序。

什么是JRE(或J2RE)

JRE简介

JRE是java runtime enviroment的简称,即java运行时环境,它是java程序运行所必须的环境集合,

主要由java虚拟机、java平台核心类和若干支持文件组成。JRE不包含开发工具、编译器、调试器以及

其他工具。

JRE的版本管理

在控制台使用java.exe工具执行java程序时,操作系统将如下顺序寻找JRE环境。

先查找当前目录下有没有JRE;

再查找父目录下有没有JRE;

接着在环境变量PATH指定的路径中查找JRE;

注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\查看CurrentVersion的

键值指向哪个JRE。

JRE的基础类库

JRE自带的基础类库主要在JRE\lib\rt.jar文件中,该文件包括了java2平台标准版的所有类库,与JRE

的版本是一致的。在程序运行时,JRE由ClassLoader(类加载器)负责查找和加载程序引用到的基类库

和其他类库。基础类库,ClassLoader会自动到rt.jar中加载,操作系统通过PATH环境变量来查找JRE

并确定基础类库文件rt.jar的位置;其他的类库,ClassLoader在环境变量CLASSPATH指定的路径中搜索

,按照先来先到的原则,放在CLASSPATH前面的类库优先被搜到,因此建议在java程序启动之前先把

PATH和CLASSPATH环境变量设置好。

什么是JDK

JDK是Java Development Kit的简称,即Java开发工具包。

JDK是整个Java的核心,它包括了Java运行环境(Java Runtime Environment)、一堆Java工具和Java

基础的类库(rt.jar).

JDK常用工具介绍:

javac.exe:编译器,用于将java源程序转成字节码;

jar.exe:打包工具,用于将相关的类文件打包成一个文件;

javadoc.exe:文档生成器,从源码注释中提取文档;

jdb.exe:debugger,差错工具;

java.exe:运行编译后的java程序,即以.class为后缀的字节码文件;

appletviewer.exe:小程序浏览器;一种执行HTML文件上的Java小程序的Java浏览器;

javah.exe:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件;

javap.exe:java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义;

jconsole.exe:java进行系统调试和监控的工具。

JDK、JRE、JVM之间有什么区别

JDK、JRE和JVM之间是一种包含关系,范围由大到小依次为JDK、JRE、JVM。JDK中包含JRE,JRE中包含

JVM。

什么是GC?GC的工作原理如何?

Garbage Collection简称GC,是垃圾回收的意思。

Java语言提供的GC功能可以自动检测对象是否超过作用域,从而达到自动回收内存的目的,Java语言

没有提供释放已分配内存的显示操作方法,资源回收工作全部交由GC来完成,程序员不能精确控制

垃圾回收的时机。

GC在实现垃圾回收时的基本工作原理:

Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。

对GC的工作原理的一些Java编程时的建议:

尽早释放无用对象的引用,特别注意一些复杂的对象,例如数组、队列等。对于此类对象,GC回收

它们的效率一般较低。如果程序允许,应尽早将不用的引用对象赋为null,这样可以加速GC的工作。

尽量少用finalize函数。finalize是Java提供给程序员用来释放对象或资源的函数,但是它会加大

GC的工作量,因此尽量少采用finalize函数回收资源。

当程序有一定的等待时间,程序员可以手动执行System.gc()。通过GC运行,但是Java语言规范并不

保证GC一定会执行。

JDK环境变量设置

JAVA_HOME:C:\Program Files\Java\jdk1.6.0_d05

CLASSPATH:dt.jar;tools.jar;

PATH:%JAVA_HOME%\bin;

了解JDK安装目录

bin文件夹:包含了JDK提供的工具程序;

demo文件夹:包含了一些Java编写的范例程序;

lib文件夹:工具程序的实现类;

src.zip文件:Java提供的API类的源代码压缩文件;

jre文件夹:JDK自带的Java运行环境,为javac.exe等工具程序提供服务。

为何在JDK安装路径下存在两个JRE

在JDK安装目录下会发现两个JRE目录:一个目录是"C:\Program Files\Java\jdk1.6.0_01\jre",另一个

目录是"C:\Program Files\Java\jre1.6.0_01"。

第一个JRE用于JDK自带的开发工具提供运行环境。在JDK中有很多用Java编写的开发工具,这些工具的

实现代码都代码在"C:\Program Files\Java\jre1.6.0_01"。

第二个JRE用于为开发者编写的代码提供运行环境。

JDK安装时设置PATH和CLASSPATH环境变量有何作用

PATH环境变量的作用:

设置PATH环境变量的目的就是为操作系统指定寻找工具程序的目录。

当用户在命令符模式输入javac命令时,操作系统会尝试在指定的PATH变量中寻找指定的工具程序,

由于PATH变量中设置了JDK的bin目录的路径,因此操作系统就可以根据这个信息来找到javac.exe

工具程序。

CLASSPATH环境变量的作用:

Java执行环境本身就是一个平台,用于运行已编译完成的Java程序(即class字节码文件).

如果设置PATH变量是为了让操作系统找到指定的工具程序,那么设置CLASSPATH变量的目的就是让

Java执行环境找到指定的Java程序对应的class文件以及程序中引用的其他class文件。

总之,设置CLASSPATH的目的在于通知Java执行环境在哪些目录下可以找到所要执行的java程序。

如何编译、运行Java应用程序

在命令符界面编译、运行Java程序的前提是需要安装JDK开发工具包。

编译:javac hello.java

运行:java 包路径.hello

如何将程序中的文档注释提取出来生成说明文档

Java中有以下3种注释语句:

//用于单行注释

/*..*/用于多行注释,从/*开始,到*/结束,不能嵌套

/**..*/用于支持JavaDoc工具而特有的文档注释语句。

JavaDoc工具能从Java源文件中读取第三种注释,并能识别注释中用@标识的一些特殊变量,制作HTML

格式的类说明文档。JavaDoc不但能对一个Java源文件生成开发文档,而且能对目录和包生成交叉链接

的HTML格式的类说明文档。

JavaDoc注释中的特殊标识

@author:标识作者信息

@version:标识版本信息

@parameter:标识参数名及其意义

@since:标识参数名及其意义

@return:标识返回值

@throws:标识异常类及抛出条件

@deprecated:标识引起不推荐使用的警告

@see:标识交叉参考

执行"javadoc JavadocDemo.java"命令,即可生成HTML格式的Java程序说明文档。

JavaDoc工具的使用格式如下:

javadoc[选项][软件包名称][源文件][@file]:javadoc -d mydoc test.Student test.Teacher

使用JavaDoc生成API说明文档时,主要从以下几项内容中提取JavaDoc注释信息。

包;

公有(public)类和接口;

公有(public)方法和受保护(protected)方法;

公有(public)属性和受保护(protected)属性;

可以在命令符操作界面输入"javadoc -help"命令查阅。

怎样制作鼠标双击就可以运行的Jar文件

Jar工具的主要用途是可以完成将一系列相关的程序文件压缩为一个文件,该工具在JDK环境已提供,

工具程序名为jar.exe.

Jar工具使用格式;

jar的用法:

用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...

选项包括:

    -c  创建新的归档文件

    -t  列出归档目录

    -x  从档案中提取指定的 (或所有) 文件

    -u  更新现有的归档文件

    -v  在标准输出中生成详细输出

    -f  指定归档文件名

    -m  包含指定清单文件中的清单信息

    -e  为捆绑到可执行 jar 文件的独立应用程序

        指定应用程序入口点

    -0  仅存储; 不使用情况任何 ZIP 压缩

    -M  不创建条目的清单文件

    -i  为指定的 jar 文件生成索引信息

    -C  更改为指定的目录并包含其中的文件

如果有任何目录文件, 则对其进行递归处理。

清单文件名, 归档文件名和入口点名称的指定顺序

与 'm', 'f' 和 'e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的归档文件中:

       jar cvf classes.jar Foo.class Bar.class

示例 2: 使用现有的清单文件 'mymanifest' 并

           将 foo/ 目录中的所有文件归档到 'classes.jar' 中:

       jar cvfm classes.jar mymanifest -C foo/ .

       

编写U.java文件

package demo.com.cn;

import javax.swing.JFrame;

class A{}

class B{}

class C{}

class D{}

public class U {
System.out.println("Hello java.jar");
JFrame jf = new JFrame();
jf.setSize(200,200);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);

}

编译Java程序

进行U.java所在目录执行"javac -d . *.java"命令,进行编译。

打包class文件:

在当前目录下执行"jar -cvf hello.jar demo/com/cn/*.*"命令,将生成class文件打包,

在当前目录中会生成一个hello.jar的压缩文件。

创建可执行文件:

在使用jar命令打包时,可以使用-m参数,其功能是在创建jar文件时,定义jar文件的机构信息,例如

主入口类。

使用-m参数打包的具体过程如下所示:

打开记事本编辑一个文件myfest(文件名随意,但是不能有后缀),在文件中输入以下信息。

Main-Class: demo.com.cn.U

注意:冒号和demo.com.cn.U之间有空格(一定要有),另外文件必须以空行结束;如果忽略的话将

失败。

执行"jar -cvfm hello.jar myfest *.*"命令。

用鼠标双击生成的hello.jar文件,即可自动运行程序。解压缩hello.jar文件后,会发现manifest.mf

文件的内容有所改变。

如果需要也可以制作一个bat文件,创建一个hello.bat文件,用鼠标双击执行.bat文件,也可以运行

java程序。

怎么给main(String[] args)方法的args指定参数值

Test.java

public class Test{
public static void main(String[] args){
System.out.println(args[0]);
System.out.println(args[1]);
}

}

编译:javac Test.java

执行:java Test tom rose

main()方法是应用程序的主入口方法,该方法在启动时允许执行环境传入启动参数。

为main()方法指定启动参数在实际中使用得不多,但需要了解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: