Java初识一

一.java简介

Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。

Java的发展历程:

  • 1995年5月23日,Java语言诞生
  • 1996年1月 JDK1.0
  • 1997年2月 JDK1.1
  • 1998年12月JDK1.2(将Java分成了J2SE,J2EE,J2ME)
  • 2000年5月 J2SE1.3
  • 2002年2月 J2SE1.4
  • 2004年10月 JDK1.5(改名JavaSE5.0,JavaEE,JavaME)
  • 2006年12月JavaSE6.0
  • 2009年04月20日,甲骨文(Oracle)74亿美元收购Sun。
  • 2011年7月 JavaSE7.0
  • 2014年3月 JavaSE8.0

Java分为三个体系(三个平台):

  • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
  • JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
  • JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。

2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字"2":J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME。

JavaSE(J2SE):

  J2SE(Java 2 Platform Standard Edition)标准版
  * 是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发

JavaME(J2ME):

  J2ME(Java 2 Platform Micro Edition)小型版    * 是为开发电子消费产品和嵌入式设备提供的解决方案

JavaEE(J2EE):

  J2EE(Java 2 Platform Enterprise Edition)企业版
  * 是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发

二.java跨平台原理 

1.什么是平台?

平台的简单定义:我们把CPU处理器与操作系统的整体叫平台

  CPU大家都知道,如果计算机是人,那CPU就是人的大脑,它既负责思维运算,又负责身体各部件的命令控制。CPU的种类很多,除去我们熟知的Intel与AMD外,还有比如上面说到的SUN的Sparc,比如IBM的PowerPC等等,这些各个公司生产的CPU使用或相同或不同的指令集。指令集就是cpu中用来计算和控制计算机系统的一套指令的集合。指令集又分为精简指令集(RISC)与复杂指令集(CISC),每种cpu都有其特定的指令集。开发程序,首先要知道该程序在什么CPU上运行,也就是要知道CPU所使用的指令集。

  下面说操作系统,操作系统是充当用户和计算机之间交互的界面软件,不同的操作系统支持不同的CPU,严格意义上说是不同的操作系统支持不同CPU的指令集。例如  windows和liunx都支持Intel和AMD的复杂指令集,但并不支持PowerPC所使用的精简指令集,而早期的MAC电脑使用的是PowerPC处理器,所以也就无法在MAC下直接安装windows,直到05年MAC改用了Intel的CPU,才使在MAC下安装windows成为可能。但问题来了,原来的MAC 操作系统也只支持PowerPC,在Intel上也不能安装,怎么办?所以苹果公司也得重写自己的MAC操作系统以支持这种变化。最后总结下,我们要知道,不同的操作系统支持不同的CPU指令集,现在的windows,liunx,mac,solaris都支持Intel与AMD的CPU指令集。

有了上面的铺垫,旺旺老师就要告诉大家,如果您要开发程序,首先应该确定:1,CPU类型,也就是指令集类型;2,操作系统;我们把这种软硬件的结合叫平台。也可以说“平台= CPU+OS”。又因为现在主流的操作系统都支持主流的CPU,所以有时也把操作系统称为平台。

跨平台的定义:Java程序可以在任意操作系统上运行,一次编写到处运行

原理:

实现跨平台需要依赖Java的虚拟机 JVM (Java Virtual Machine)

这里再说下语言根据执行方式的不同分类:第一是编译执行,如C,它把源程序由特定平台的编译器一次性编译为平台相关的机器码,它的优点是执行速度快,缺点是无法跨平台;第二是解释执行,如HTML,JavaScript,它使用特定的解释器,把代码一行行解释为机器码,类似于同声翻译,它的优点是可以跨平台,缺点是执行速度慢,暴露源程序;第三种是从Java开始引入的“中间码+虚拟机”的方式,它既整合了编译语言与解释语言的优点,同时如虚拟机又可以解决如垃圾回收,安全性检查等这些传统语言头疼的问题,所以其后微软的.NET平台也使用的这种方式。

  Java先编译后解释

  同一个.class文件在不同的虚拟机会得到不同的机器指令(Windows和Linux的机器指令不同),但是最终执行的结果却是相同的

 2.JVM,JDK,JRE

JVM:

就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
  也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
  只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
  JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
JRE(JVM+lib(库)):
是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
  JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。
  与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
JDK:
JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品。
  JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
  JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
三者之间的关系:

三.JDK的下载与安装

1.登录https://www.oracle.com网址,到网站上找到对应的的系统进行下载

2.下载完成后,直接点击安装,傻瓜式安装即可

注意事项:1.安装路径不要有中文或者特殊符号如空格等。开发工具最好安装目录统一(建议

     2.项目开发中依赖的jdk版本一样,一定要选择最合适的jdk版本安装

3.配置环境变量

新建一个环境变量

添加到环境变量中去:

% %双百分号表示引用

4.验证环境变量是否成功

配置好环境变量后,在cmd 中输入Java 和 Javac 出现上述图片,即可

四.编写第一个Java程序

1.HelloWorld实例

/*
  这是Java的多行注释
*/
// 这是我的helloworld案例
public class HelloWorld {
    //这是程序的入口函数,所有的入口函数都是从main函数开始
    public static void main(String[] args) {
        // 这是输出语句
        System.out.println("HelloWorld");
    }
}

2.Java程序的执行过程

/*
1.在命令行模式中,输入javac命令对源代码进行编译,生成字节码文件
javac 源文件名.java
2.编译完成后,如果没有报错信息,输入java命令对class字节码文件进行解释运行,执行时不需要添加.class扩展名
java HelloWorld
*/

这样我们就可以在命令行中看到HelloWorld

3.注释

注释概述
用于解释说明程序的文字
Java中注释分类
单行注释
格式: //注释文字
多行注释
格式: /*  注释文字  */
文档注释
格式:/** 注释文字 */
注释的作用
解释说明程序,提高程序的阅读性

4.关键字

/*
关键字概述
被Java语言赋予特定含义的单词
关键字特点
1.组成关键字的字母全部小写
2.常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观
*/

Java中的关键字

5.常量

/*
一.常量概述
    在程序执行的过程中,其值不可以发生改变的量
二.常量分类
  1.字符串常量    用双引号括起来的内容(“HelloWorld”)
  2.整数常量        所有整数(12,-23)
  3.小数常量        所有小数(12.34)
  4.字符常量        用单引号括起来的内容(‘a’,’A’,’0’)
  5.布尔常量        较为特有,只有true和false
  6.空常量        null(数组部分讲解)
*/

6.变量

/*
变量概述
    在程序执行的过程中,在某个范围内其值可以发生改变的量
    从本质上讲,变量其实是内存中的一小块区域
变量定义格式
    数据类型 变量名 = 初始化值;
    注意:格式是固定的,记住格式,以不变应万变
*/

变量的一些要求:

五.java中的数据类型

1.数据类型概述

Java语言是强类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以它们表示的数据大小也是不一样的

2.基础数据类型

3.标识符

1.标识符的简介

/*
作用
    给包,类,方法,变量等起名字
组成规则
    由字符,下划线_,美元符$组成
    这里的字符采用的是unicode字符集,所以包括英文大小写字母,中文字符,数字字符等。
注意事项
1.不能以数字开头
2.不能是Java中的关键字
*/

2.标识符命名规则

命名规则
1.基本要求
    见名知意
2.常见命名的规则
    包 (其实就是文件夹,用于对类进行管理)
        全部小写,多级包用点隔开。
        com,cn,com.it
    类
        一个单词首字母大写    Student,Car
        多个单词,每个单词首字母大写    HelloWorld
    变量或者方法
        一个单词首字母小写。    age,show()
        多个单词,从第二个单词开始每个单词首字母大写        maxAge,getAge()    

4.变量的命名规则

/*
1.由字符,下划线_,美元符$组成
2.不能以数字开头
3.不能是Java中的关键字
*/

注意事项:

/*
1.变量未赋值,不能直接使用
2.变量只在它所属的范围内有效。
    变量在哪对大括号内,变量就属于哪对大括号
3.一行上可以定义多个变量,但是不建议
*/

示例代码:

public class Variable {
    public static void main(String[] args){
        // 变量定义的方法: (数据类型) 变量名 = 初始值
        
        //1.变量定义的第一种方式:
        int a = 10;
        System.out.println(a);
        // 变量不能没有未赋值,不能直接使用
        
        //int b;
        //System.out.println(b); 错误,没有赋值不能够先使用
        
        //2.变量定义的第二种方式:
        int b;
        b = 20;
        System.out.println(b);
        
        //3.可以在一行上定义多个变量,但是不建议这样做
        int c,d;
        c = 30;
        d = 50;
        System.out.println(c);
        System.out.println(d);
        
        int ee = 66;
        
        //4.变量只对它所属的范围那对括号有效
        {
            int e = 60;
            System.out.println(e);
            System.out.println(ee);
        }
        
        //System.out.println(e);错误,变量只对离他最近的那对括号有效,内层括号可以引用外层括号的变量,外层不能用内层括号的变量
        
        //5.定义long类型的变量
        //long f = 100000000000000; 错误,过大的整数,需要在后面加上L
        long f = 100000000000000L;
        System.out.println(f);
        
        //6.定义float类型的变量
        //float ff = 11.22; 错误: 可能损失精度
        float ff = 11.22F;
        System.out.println(ff);
        
    }
}

5.类型转换

1.隐式转换(默认转换)

byte,short,char—int—long—float—double
byte,short,char相互之间不转换,他们参与运算首先转换为int类型

2.强制转换

目标类型 变量名=(目标类型)(被转换的数据);

3.示例代码

public class TypeChange {
    public static void main(String[] args){
        //1.相同类型的加法运算
        int a = 5;
        int b = 10;
        //int c = a + b;
        //System.out.println(c);
        System.out.println(a+b);
        
        // 2.不同数据类型的运算
        byte c = 20;
        int d = 30;
        //byte e = c + d;  可能损失精度(应该定义为精度更高的数据类型)
        //System.out.println(e);
        int e = c + d ;
        System.out.println(e);
        
        //隐式转换
        System.out.println(c + d);
        
        //3.如果需要强制转换,格式:目标类型 变量名=(目标类型)(被转换的数据);
        byte f = (byte)(c + d);
        System.out.println(f);
        
        // 建议:做运算的时候,结果该是什么类型,就用什么类型接收,不要随便转换类型,否则可能损失精度
    }
}

 

posted @ 2018-08-30 16:48  明-少  阅读(101)  评论(0)    收藏  举报