java学习笔记01与作业

JVM、JDK、JRE

JVM:Java虚拟机(HotSpot),Java程序的运行环境,所编写的程序并不是运行于操作西铜之上,而是JVM运行在操作系统之上,Java程序运行于JVM之上,正因为如此才可以实行跨平台。

JVM要求的运行规则是,java命令后面加上要运行的类的名字

C:\Program Files\Java\jdk1.8.0_74\jre\bin\server jvm所在位置 //win

JDK:Java的开发库,包含了JRE和开发人员所需要的库

JRE:Java运行时环境,包含JVM和运行Java程序所需要的类库

JDK包含了Java程序开发运行所需要的环境

JDK下载:https://www.oracle.com/index.html

bin:脚本文件,可执行文件 ,存放JDK中提供的Java相关的命令

db:JDK自带的小型数据库

include:JVM启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件

jre:JDK自带的一个java运行环境

lib:library,提供jar包依赖

src.zip:压缩文件存放JDK的核心代码,API源码

Java程序运行流程

Java程序开发步骤:编写java源程序,编译Java程序,运行Java程序

编译:将编写好的Java程序翻译成class文件,在这个过程中会检查编写的程序是否存在编译错误,没有编译错误就会产生字节码文件

运行:将编译好的class文件交给jvm去执行,Java程序会在jvm上运行。\

JVM的热点代码:

热点代码有两类?

1 被多次调用的方法
2 被多次执行的循环体

判断是否为热点代码,需不需要触发即时编译?

1 基于采样的热点探测:周期性去栈顶采样
2 基于计数器的热点探测:为方法建立计数器,超过阈值则为热点

main与类

1、一个Java文件只能拥有一个public class

2、如果写了public class,类的名字要与文件名保持一致

3、一个Java可以出现多个class,但class的名字不能重复

main:主方法,Java程序的入口,程序执行都是从main开始,固定写法 public static void main (String[ ] args){},如果不写main方法,程序也可以进行编译但无法运行于jvm

命令:

javac HelloWorld.java -encoding utf-8 转编码

作业:
1.修正Test1.java、Test2.java、Test3.java、Test4.java
四个java源文件中的错误,使其能够编译和运行

2.阐述JRE JDK JVM 之间的关系
JVM java虚拟机,用来运行java程序,现在oracle jdk 用的虚拟机模式时HotSpot
JRE java运行时环境,主要时包含了JVM和运行时所需的库(rt.jar)
JDK java开发库,主要包含了 JRE和 开发所需要的库

JDK > JRE > JVM

3.Java为什么说是跨平台的语言,这个平台指的什么
所谓的平台指的就是操作系统
所谓的跨平台其实就是jVM功劳
因为java程序时是运行在JVM上
只需要在不同的操作系统安装不同的jvm
一处编译,处处运行

4.阐述Java程序运行流程
1. 开发人员编写的程序 源程序 .java
2. 经过编译以后就会产生 一个字节码文件 .class
class 文件里面都是二进制
我们可以将二进制转换成十进制去查看
每一个class文件 开头都有一段字母,这个字母就是魔数
还有一串数字 202020 34:52(10)
52 代表jdk 1.8的版本 , 51: jdk 1.7

3. 当 java 限定类名
   1.启动jvm
   2.启动启动类加载器,去加载 jre/lib/*.jar(rt.jar)
   3.再启动拓展类加载器,去加载 jre/lib/ext/*.jar
   4.再启动应用类加载器去加载开人员写的jar/class文件
   5.利用双亲委托机制去加载开发人员写的class文件,如果
	 说限定类名与  jre/lib/*.jar jre/lib/ext/*.jar 里面
	 任何一个类相同,就不会加载自己写的。
   6. 加载完了以后进行字节码校验
   7. 校验通过以后,热点代码直接执行,非热点代码通过
	  JIT 去解释一行就让CPU执行一行。

5.什么样的错误会在编辑期间出现错误

不符和java语法的错误。

附加题:
1.写出九九乘法表

public class multiplication{
    public static void main (String[] args){
        for(int i=1;i<10;i++){
            for(int j=1;j<i+1;j++){
                System.out.print(j+"×"+i+"="+i*j+" ");
            }
                System.out.println();
        }
    }
}

2.给定一个数组 arr = {1,3,4,5,6,76}
按照从大到小展示出来。

public class sort{
    public static void main (String[] args){
        int arr[]={1,3,4,5,6,76};
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]<arr[j+1]){
                    int temp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        for(int s:arr){
            System.out.print(s+" ");
            
        }
    }
}

3.给定一个数组,求出数组里面 最大值和最小值
并且按照从小到大排列出来
arr = {45233,2345,23452,32,3412,341}

public class reorder{
    public static void main (String[] args){
        int arr[]= {45233,2345,23452,32,3412,341};
        for(int i=0;i<arr.length;i++){
            int min =arr[i];
            int index =i;
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]<min){
                    min=arr[j];
                    index =j;
                }
            }
            int temp =arr[i];
            arr[i]=min;
            arr[index]=temp;
        }
        System.out.println("数组最大值:"+arr[5]);
        System.out.println("数组最小值:"+arr[0]);
        for(int s: arr){
            System.out.print(s+" ");
        }
    }
}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值