`

JAVA 基础问题 JDK JRE JVM 运行时数据区 instanceof

阅读更多
1.解释JDK,以及JDK主要包含的内容  
   JDK-Java Development Kit JAVA开发工具包,主要为JAVA应用程序提供了基本的开发和运行环境。
   JDK 主要包含:
   jre--JAVA运行环境 
    lib--JDK 类库:最基础的JAVA类以及各种实用类。java.lang,java.io,java.util,java.sql等包中的类都位于JDK类库中.
   bin开发工具:都是可执行程序 例如 javac.exe 编译工具,java.exe运行工具,javadoc.exe 生成JavaDoc文档的工具,jar.exe 打包工具

2.JDK 和 JRE ,JVM的区别
   JDK,java开发工具包,如上解释.
   JVM,JAVA虚拟机,是整个JAVA实现跨平台的最核心的部分,所有的JAVA源程序需要经过编译成为 .class的字节码文件,JVM加载字节码文件执行JAVA程序.本地操作系统不会直接执行.class文件,jvm与操作系统进行交互,将程序解释给本地操作系统.
   一次编译,到处运行!
   JRE,java运行时环境 java runtime environment.只有JVM还不能完全执行class文件,在解释.class文件时JVM需要调用解释所需要的类库lib. jre目录下的bin和lib两个文件夹.bin目录中的就是jvm,lib中就是jvm工作所需要的类库.jvm和lib一起就可以认为是jre.jre里有运行.class的java.exe.

3.J2SE,J2EE,J2ME概念的区别 
  三者是JAVA针对不同的使用来提供不同的服务,也就是提供不同类型的类库。
  针对普通PC应用的J2SE java 2 standard edition,JAVA SE
  针对企业级应用的J2EE java 2 enterprise edition,JAVA EE
  针对嵌入式设备以及消费类电器的J2ME java 2 micro edition
 
  对于初学者 都是从JAVA EE 即J2SE开始学习.
  J2EE 是在J2SE的基础上添加了一系列的企业级应用编程接口,J2EE中包含有很多的几乎是,比如 JDBC, JNDI, EJB, RMI, JSP, Servlet, XML, JMS, Java IDL, JTS, JTA, JavaMail 和 JAF
  
4.举例说明JDK中提供的JAVA基本包 
  java.lang包-包含Thread线程类,Exception异常类,系统类System,整数类Integer,字符串类String 此包自动导入
  java.awt包 -抽象窗口工具箱包,Abstract Window Toolkit,用于构建GUI界面的类及绘图类
  java.io,输入输出流,文件操作,IO流处理等的一些类
  java.util,实用类工具包  日期类Date,集合框架接口,实现类与工具类等等
  java.net,TCP/IP网络协议,Socket类及与URL相关的类,主要用于网络编程
  java.sql,数据库编程的接口与类的包
  java.rmi,编写网络程序的包  Remote Method Invocation
  还有类似于
  javax.* 扩展包 ,是对一些基本包的扩展 例如 javax.sql,javax.swing,以及编写声音的javax.sound包等等.

5.JAVA 包的作用以及命名规范
  作用:
  1)区分名字相同的类
  2)可以对访问权限进行控制 例如使用访问修饰符,不同包的类互相访问时有权限约束
  3)有助于划分和组织JAVA应用中的各个类
  例如 GuoGuoDao公司开发了一个BookStore网站系统,在这个系统中一部分类位于客户端界面处理,一部分位于服务器端业务逻辑处理,还有其它公共类工具类.
  com.guoguodao.bookstore.client-包中的类用于构建客户端界面
  com.guoguodao.bookstore.server-包中的类用于处理业务逻辑
  com.guoguodao.bookstore.common-包中类是一些实用工具类
 
  对于位于服务器端的类,有一部分用户处理用户订单,一部分管理库存,一部分管理用户信息等
   com.guoguodao.bookstore.server.order --订单
   com.guoguodao.bookstore.server.store --库存
   com.guoguodao.bookstore.server.customer --用户信息
  规范:
  包名小写,一般包能够包含 类的创建者拥有者的信息,软件项目的信息,类在具体软件项目中所处的位置
   例如有一个类名为MyClientInfo类的完整类名为 com.guoguodao.bookstore.normal.MyClientInfo
MyClientInfo类由GuoGuoDao公司开发,属于bookstore项目,位于bookstore项目的normal包中

6.简单介绍JAVA虚拟机运行时数据区
  JVM 是由JDK提供的一个软件程序,主要作用是执行JAVA程序。
  1)加载经过编译后.class文件的二进制数据到内存
  2)对类的二进制数据进行验证
  3)解析并执行
  JVM提供了程序运行时环境,其中一个重要的资源就是运行时数据区,它是操作系统为JAVA 虚拟机进程分配的内存区域,受JVM管理。
  运行时数据区又可以分为 堆区,方法区,JAVA栈区。
  堆区主要存放对象
  方法区中存放的是类的类型信息--静态变量和方法信息,方法信息中包含这所有方法的字节码。
 

7.java 标识符有哪些命名规则
1)以字母 数字 下划线和$符号组成
2)不能以数字开头
3)不能是JAVA中的关键字
4)类名首字母大小 属性和方法名称首字母小写
5)常量大写

8.分哪两种数据类型,并列出两种数据类型所包括的具体类型
    1)分为基本数据类型 和引用数据类型
2)基本数据类型包括: int,float,double,boolean,char,byte,short,long;
3)引用数据类型包括: 类,数组和接口

9.JAVA 中的类型转换
  JAVA 的类型转换和以前所学的C语言类型转换道理一样,一种数据类型可以转换为另一种数据类型。用户必须谨慎使用此功能,因为误用可能会导致数据丢失。
  类型转换有两种:自动类型转换和强制类型转换

  自动类型转换
     将一种类型的变量赋给另一种类型的变量时,就会发生自动类型转换。
     前提条件:
              两种类型必须兼容,数值类型 int float 等.
            目标类型大于源类型。
找错:
 public class Test{

         public static void main(String args[]){

                   //自动类型转换

                   int i =10;

                   float j=5;

                   i=j; 

                   System.out.println(" i:   "+i);

              }

     }
//i=j  possible loss of precision   可能会引起精度丢失


int long double float 可互相兼容,但是也要满足目标类型大于源类型的规则。

注意:在C语言中char 和int 类型是可以互相兼容的。

但是在JAVA中,只能由char 类型的变量赋值给int 类型,但是int 类型的变量是不允许赋值给char 类型的。

char 和boolean 不兼容,所以无法实现类型转换。
找错:

public class Test{

         public static void main(String args[]){
                   //自动类型转换和兼容性
                      int i =10;
                   char c = 'a';
                   c=i;
                   System.out.println(" c:   "+c);
              }
     //c=i; 一个数值类型的变量i 的值是不允许赋值给char类型的变量的
     }


但是这样写是没有问题的:

public class Test{

         public static void main(String args[]){
                   //自动类型转换和兼容性
                   int i =10;
                   char c = 'a';
                   i='A';
                   System.out.println(" i:   "+i);
                   i=c;
                   System.out.println(" i:   "+i);
              }
     }


所以:char 类型的值本身还是ASCII码值。

强制类型转换

自动类型转换并非在所有情况下都有效,在必须将float 值赋给int 值时,这种类型转换不会执行,因为int 类型的数据宽度小于float 类型,所以要显式的进行强制类型转换。

了解类型提升规则
JAVA 具有应用于表达式的多个提升规则:
所有byte 型和short 型都可提升为int 型。
如果一个操作数为long 型,则整个表达式提升为long 型。
如果一个操作数为float型,则整个表达式提升为float 型。
如果一个操作数为double 型,则整个表达式提升为double 型。

找错:
public class Test{
        public static void main(String args[]){
                //强制类型转换
                   int i =10;
                   float j =9;
                   i = 1+j;
                   System.out.println(" i:   "+i);
              }
     }
 
// i =1+j;  j是float 类型,只要j参与运算,整个表达式的值将提升为float 类型

// 所以在计算前需要(int)j 



10.JAVA 数组

数组是一个变量,相同数据类型的数据,连续内存地址存放。
可以通过指定数组的名称和大小来声明数组,一旦声明数组的大小,就不能再修改。

数组中的数据可以是原始数据类型,也可以是一个对象。

与变量一样,在创建数组时可以对该数组赋值。如果初始化没有为数组赋值,JAVA将根据数据类型为所有数组元素赋给一个默认值。

     创建数组的三种方式
          仅声明:char ch [] ;
         声明和创建:char ch [] = new char [10];//使用关键字new 声明并未数组元素分配内存
          声明创建和初始化:char ch[] = {‘A‘,’B’,’C’};
         String str [] ={"Simonlv","Simba","Ben","David"};

命令行参数
     JAVA 程序在执行过程中,信息可以传递至main() 方法。

public class Test{

         public static void main(String args[]){
              //演示传递命令行参数
              System.out.println("传递命令行参数:");
              
              for(int i=0;i<args.length;i++){
                       System.out.println(args[i]);
                   }
         }
     }



11.instanceof 关键字
  
   A instanceof B,可用来判断A是不是B这一类型的关键字。
 
  例如: Fee父类,费用类.  WaterFee 水费 ,GasFee 燃气费 继承父类 Fee

 
 public class Instance {

	public void uphandFee(Fee fee){
		if(fee instanceof WaterFee){
			System.out.println("交水费!");
		}
		
		if(fee instanceof GasFee){
			System.out.println("交煤气费!");
		}
	}
	
	public static void main(String[] args) {
		Fee waterFee = new WaterFee();
		Fee gasFee = new GasFee();
		
		new Instance().uphandFee(gasFee);
		new Instance().uphandFee(waterFee);
	}
}
   


但最好不要使用这样的方法,既然已经存在多态,利用一种类型,多种形态,使用重写的方法,根据引用不同来调用更加轻松一些,且更具有面向对象的特色.
public class Instance {

	public void uphandFee(Fee fee){
		fee.showFee();//子父类中都存在的方法 子类方法也重写了父类的方法 各自流程实现不一样即可
	}
	
	public static void main(String[] args) {
		Fee waterFee = new WaterFee();
		Fee gasFee = new GasFee();
		
		new Instance().uphandFee(gasFee);
		new Instance().uphandFee(waterFee);
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics