java基础第一课

电脑语言发展:

第一代:机器语言-》第二代:汇编语言-》第三代:高级语言

汇编语言:结构不好,出来很多高级语言(面向对象、面向过程(B->C语言(贝尔)->C++))

高级语言:fortran(IBM); C#:小型项目;

JAVA特性:一次编写,各处运行。(完全面向对象)

一、 概述

a) The Source for JAVATM technology: www.sun.com

b) 过程中一定要查java api文档。

c) 诞生于1991,sun公司,原名Oak(橡树)。

d) 应用领域

1>*企业级应用:地图,电力系统,华为(协议封装(好维护)),大型ERP系统后台。

2>大型应用服务器:oracle, application,server, IBM webspere, bea weblogic.

3>无线领域:WAP CATE

4>嵌入式领域:手机游戏,JAVA芯片

5>JAVA图形:CIS平台客户端

二、 优点

1. 简单:

风格类似c++;摒弃了C++中容易引发程序错误的地方。

2.面向对象:

支持静态和动态风格的代码继承及重用

3. 健壮(用户不管怎么输入都不会出现异常)

4. 多线程(线程调动机制不一样,产生的结果不定,控制问题)*(线程安全问题,悲观锁,乐观锁)

5. 结构中立跨平台(java核心优势)

6. 安全

7. **一次编写,到处运行**

克服c的问题,GC垃圾回收改善内存泄漏。单一继承。指针问题。

缺点:效率低。内存耗量大(硬件要求高)。

三、JAVA应用程序运行机制

1.计算机的高级编程语言类型

1>编译型:C语言(效率高,一次性把源程序编译成机器语言直接执行,结构化语言,需求变化不大,底层变化不大)

2>解释型:Basic语言

2.JAVA是两种语言的结合(面向对象,需求变化不定)

          **JAVA虚拟机**

先编译成虚拟机接受的字节码文件,虚拟机再相应的具体的机器系统解释成指令。

      **每个系统对应一个虚拟机**

需要为每一个执行系统提供一个虚拟机(统一规范,按Java标准),同一个程序在四个操作系统上运行,提供四个虚拟机(优点:上层都符合同样的规范,拿到相同的字节码文件。

缺点:效率低,转化编译又解释JAVA缺点)

3.JAVA源程序,字节码文件,机器码指令。

四·JAVA的平台相关性

1.JAVA源代码和字节码的与机器无关的

2.JVM是与机器相关的

3.装有不同操作系统的机器上,需要有专门为该操作系统开发的JVM.

七.JAVA的垃圾回收机制(GC)

**垃圾收集GC**

(后台线程)程序执行过程中对内存使用情况跟踪,当对象长时间无人使用时,自动进行(除非对象被设置为持久态)。

优点:改善内存泄漏

缺点;效率低

**Java能真正避免内存泄漏吗?**

答:(c语言容易出现:内存使用不当,内存泄漏,系统崩溃。)不能,只能改善。内存泄漏仍是国际难题。

八. Java分为两类(applet小应用程序(较少使用不安全),应用程序application) 

九.Java应用程序

*4.虚拟机就是一种规范。主方法是虚拟机的入口。虚拟机只能通过类找主方法,因为最开始是没有对象的。

    会向主方法栈帧里传参数,空数组对象,类型string。(没有任何一个元素)标准类库里类中找string类型,创建string类型的变量s.

**String类型和string[]类型**

    String[]类型(args输出string[]类型的对象的地址,返回的就是string[]类型,加载了string[]类型的字节码文件。传一个string[]类型字符串数组对象(空数组对象无元素))

字节码文件:不一定是主类的字节码文件,但一定包含主方法。

HelloWorld运行原理及过程

Java HelloWorld 找到字节码文件

Javac HelloWorld.java 只有一个类编译成一个字节码文件。

**helloworld有几个文件几个对象几个类**

两个文件:源文件,字节码文件(分为四个;string文件,string[]文件,HelloWord.class,system文件。)

五个对象:空对象,HelloWorld常对象,三个输入输出流对象(标准字节输出流对象system.out      /system.in键盘输入/system.err显示器)

三个方法:main方法,println方法,to string方法

两个变量:局部变量:args ; s

一个类:helloworld

零个属性

过程:

省略了导包(默认)Java.Lang.*.包在标准类库中的lang包中找对象。

1.虚拟机加载helloworld,加载内存字节码文件,找主方法,用static通过类找主方法且公有public执行主方法,虚拟机不需要接收返回值(void),主方法不要给虚拟机返回值。

虚拟机会向主方法传参,将局部变量s定为形参(没有确切的值,赋予null),参数为一个字符串数组对象new String[0],

参考上图。空数组对象无元素有值。

2.执行string s,string.class,建string类型的变量,到jdk里的标准类库里找到string的字节码文件和缓冲内存,加载内存的内方法区,(args类型也是string[].class,)

   找到string类型局部变量s,  string.class, s在栈中,s在方法里值是不定的(string会复写s的值),当方法区中常量池无helloworld时建一个helloworld字符串对象。对象的返回值即使对象的值又是对象的地址引用距离,对象的值返回的是对象的地址,字符串常量字符串对象理论上在堆,这个对象特殊。将这个字符串对象给s。输出。

3.在堆上创建三个输入输出对象,system.out标准字节输出流对象等。

4.调用println()方法输出s的值,即helloworld的地址,没有真正输出地址。Jdk会自动调用string对象的to string方法,直接输出对象里的字符串。

你可能感兴趣的:(java基础第一课)