【第1天】Java语言的特性以及JDK/JRE/JVM的简介

1. 语言特性

1.1 跨平台

       **用Java开发出来的应用程序不受底层平台的限制。** 这里所谓的“平台“指的是**操作系统**,这个功能由**JVM虚拟机**实现.

JVM的三部分:秘书+保镖+翻译

  • 秘书:类加载器(Class Loader),计算机加载读取一个类的.class(字节码)文件。
  • 保镖:字节码校验器(Bytecode Verifier),对每一个字节进行校验,看它是否存在问题(语法问题、错误),出现错误编译过程就会中断,无法生成.class文件。
  • 翻译:解释执行器(Interpreter),具有翻译的功能,将源文件(给人看的英语单词)编译为计算机可以看懂的.class文件。(文件内容是乱码,给计算机看的)
    一个Java程序运行需要经过的步骤
  • 总结为:
    .java文件 -> 通过JDK环境相关指令执行编译 -> .class文件
    JVM初始化之后,如果有类的执行、调用等相关操作,JVM就会将.class文件加载到内存中,到运行阶段(类加载器查找载入.class文件、生成并装载该.class类对象,字节码校验器校验链接,解释执行器执行)。

JVM的地位(由计算机的层级关系看)

  • 计算机1:
           硬件环境:586机的CPU —> 操作系统:Windows —> JVM For Windows
  • 计算机2:
           硬件环境:Core i7的CPU —> 操作系统:Solaris(Sun公司开发的一个操作系统)—> JVM For Solaris

比较可见

  • 如果使用C++开发,需要开发两个版本,且版本源码大致相同,直接运行在操作系统上。
  • 如果使用Java开发,只需要在两个计算机操作系统上安装不同版本的JVM,即可一套代码,两处运行,代码运行在JVM上。

一个Java程序的运行流程

  1. 编译阶段
           将.java(源文件)文件编译为.class文件,把代码进行解释翻译,字节码校验器检查无错同时生成一个.class文件。
  2. 运行阶段
           类加载器:编译无错后生成了.class文件后,加载读取一个类的.class文件。

1.2 安全/健壮

  • 安全性:

    • 没有“指针”概念 ,堵住了黑客利用指针篡改访问权限等因使用指针而造成的漏洞。
    • 增加垃圾(无用的对象引用)自动回收机制,好比有助教帮忙擦黑板,可以一直写不必担心需要擦黑板。 这功能通过GC线程(一个低优先级的守护线程)实现,监测回收无用的对象引用 ,防止由于未释放的垃圾堆积导致内存溢出,使程序运行越来越慢直至死机。
    • 增加Exception(异常)概念,使程序中异常处理代码正常业务代码分离,保证程序代码更加优雅。
  • 健壮性: 指一个计算机系统在执行过程中处理错误,以及算法在遭遇输入、运算等异常时继续正常运行的能力。

1.3 开源

1.4 简单 ★

  1. 语法简单: 被称为“C++的–”,意为取其精华,去其糟粕* 。
  2. 思想简单:面向对象的思想*。

// *糟粕: 指针、手动的垃圾回收、运算符重载 * 。
// *运算符重载:程序员可以以自己的意愿让运算符表示其含义。

// *面向对象的思想:使用代码模拟现实生活,灵活,以人为本。 (OO: Object oriented)
//附:面向过程的思想:需要人以计算机的角度去思考问题,以"机"为本,注重流程,比较死板。

由此引申出面向对象与过程的对比

//需求:求一个长10宽8的长方形面积与周长

//面向过程
public class Rect{
	public static void main(String args[]){
			System.out.println(10*8);
			System.out.println((10+8)*2);
	}
}
//面向对象(有类(模板))
//长方形类(实体类)
Class Rect{

	//类体里面定义属性和方法
	
	//属性:对象有什么
	//变量赋值就是写死在类中的,不灵活
	int length;
	int width;
	
	//方法:对象会什么(方法的定义:修饰符*+返回类型*+方法签名(方法名 参数))
	//求面积方法
	public void area(){
		System.out.println(length * width);
	}
	
	//求周长
	public void perimeter(){
		System.out.println((length + width) * 2);
	}	
}

//测试类
public class Test{
	public static void main(String args[]){
		//1.创建对象:
		//类名 对象名 = new 类名();
		Rect rect = new Rect();
		//new:新建一个对象并赋一个内存空间
		
		//2.对属性赋值:对象.属性 = 值;
		rect.length = 10;
		rect.width = 8;

		//3.求面积
		rect.area();

		//4.求周长
		rect.perimeter();
	}
}

//对比可见:面向过程的代码可复用性太低,维护难,错一个改多次,耦合度太高。
//高内聚:一个方法完成一个工作。 低耦合:代码之间相互依赖程度低,出错改的次数少。
// *修饰符:访问权限(如public:公共访问;private:私有)
// *返回类型:方法执行结束之后返回的数据类型,空就写void。

面向对象的名词解释与实践

  • :以class修饰,一组类型相同事物高度抽象之后的集合概念,是用来创建对象的模板(猪狗猫抽象为动物类,猪狗猫也就是对象。类是泛指,对象是特指。又想到了柏拉图说的的“理型世界”,类是这个世界中的“理型”)。

  • 对象:类的一个具体实例

  • 引用:对象的名字,猪狗猫,对象放在内存空间中,调用时要使用到的代号。Java中的对象在创建的时候需要起名字,但是一个对象如果一个名字都没有的话,会被gc回收掉,此时是零引用内存回收。

  • 属性:对象有什么

  • 方法(函数):对象会什么

//练习:
//需求:张三同学今年十八,喜欢画画和游泳。
//测试类
class Test{
	public static void main(String args[]){
		
		//创建对象
		Student stu = new Student();
		
		stu.name = "张三";
		stu.age = 18;
		
		Sout(stu.name + "  " + stu.age);
		
		stu.drawing();
		stu.swimming();
		
	}
}

//抽象出来的学生(实体)类
class Student{
	
	//有什么
	String name; 
	int age;
	
	//会什么
	public void drawing(){
		Sout("会画画");
	}
	
	public void swimming(){
		Sout("会游泳");	
	}
	
}

需要注意的是

  • 一个程序在运行时才会找main方法,之前编译时里面有没有main方法是无所谓的,只有在运行时报错。
  • 主类的类名要.java文件名一致,这个错误也只有在运行时才会出现,就算不一致编译也会通过。
  • 公共public修饰符修饰的类,应使用此类名作为这个.java文件的文件名
  • 有几个class编译出几个.class文件。
  • 对象是对程序员不可见的,程序员只能调用其引用。

1.5 动态更新

       对于Sun提供的一些核心方法只保留一个指向的关系。当若干年后核心类库升级了,我们的程序还是可以正常执行。

2 JDK/JRE/JVM的简介

2.1 安装JDK

       类比“SDK = Software Development Kits (软件开发工具包)”。
       JDK = Java Development Kits (Java开发工具包),包含类似于"System.out"这样的**基础工具类*,需要注意的是,JDK1.5之后版本号由1.X.0改为了X.0。在大版本号下划线后面标注的是这个版本的第多少次迭代。
JDK的下载地址
选择“Java SE Development Kit”,如果是32位操作系统选择x86,64位选择x64,其他操作系统根据情况自选,并选中“Accept License Agreement”,选择download列中的链接下载。下载后直接安装到默认的目录即可。

2.2 三者之间的关系

  • JRE = Java Runtime Environment(Java运行环境)**。包含 JVM(Java虚拟机)API(核心类库和编程接口)。所以,编译好的.class文件可以说运行在JVM,也可以说运行在JRE上。
  • JDK包含JREbin(常用工具命令,像javac、java类似的)**。早期程序员需要分别安装JDK编写环境、JRE运行环境;现在,JRE自动导入到了JDK中,只需要装JDK即可。
    JDK/JRE/JVM的关系

2.3 面试题

问:JDK和JRE和JVM之间的区别

  1. 分别表示的含义是不一样的:JDK表示Java软件开发工具包,JRE是Java运行环境、JVM是Java虚拟机。
  2. 作用不同,JDK即可以编写代码又可以运行代码,JRE只能运行代码,所有的程序最终跑在JVM上面。因此,用户的电脑上只需要安装JRE,只用运行。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值