2020年7月17日 JAVA历史 特点

Java历史:(了解)
1、诞生于SUN(Standford University Network)
2、大概于1996年发布正式的第一版
3、Java之父:詹姆斯.高斯林
4、2009年SUN被Oracle(甲骨文)收购
5、目前学习(开发)的版本是Java8
6、最新版本:Java12(2019年5月)目前是Java 13

7、Java分为三大方向:JavaSE,JavaEE,JavaME
Java9尝试把JavaSE,JavaEE,JavaME合起来。用模块的方式进行区分。

2、Java的特点(了解)
(1)面向对象:关注类、对象、接口等,以及继承、实现等关系
(2)强类型:关注数据类型
(3)体系中立的:字节码.class文件
(4)垃圾回收:GC

3、Java语言运行机制:跨平台
跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。
“Write once , Run Anywhere”一次编写,处处运行。

原理:Java程序不是直接运行在操作系统上,而是运行在JVM(Java Virtual Machine)。
而不同的操作系统平台,可以安装不同的JVM。这个虚拟机只要下载安装就可以了,
程序员不用管,程序员只要关注自己的Java程序就可以。

Java程序开发和运行的步骤:
1、编写Java代码,保存的代码的文件.java
后缀名:.txt,.doc,.jpg,.mp4等
2、编译Java代码为字节码,字节码文件.class
为什么要编译为字节码呢?因为JVM只认识字节码,不认识Java代码
3、运行字节码
把字节码再转成CPU能执行的机器指令。

4、开发环境搭建
(1)
JDK:Java Developer's Kit,Java开发工具包
JDK = JRE + 开发工具集
JRE:Java Runtime Environment,Java运行环境
JRE = JVM + 核心类库(提前写好的代码)
JVM:Java Virtual Machine,Java虚拟机,
运行Java程序需要用到JVM

如果仅仅是运行Java程序,只要装JRE就可以了,不需要装JDK。
如果是要开发Java程序,那么必须安装JDK。

(2)下载与安装
网址:www.oracle.com
下载时注意:是什么平台
例如:windows的64位:jdk-8u141-windows-x64.exe

安装:傻瓜式安装
提醒:
①以后我们作为开发人员,安装软件时,要避免中文目录
②每一个软件的安装建立自己的目录

(3)卸载
①控制面板
②通过“360”或“电脑管家”进行卸载

 

5、环境变量
为什么要配置环境变量?
windows等操作系统,默认是在当前路径下找“命令”等工具的。
如果我希望它在我指定的目录下去查找这个“命令”,那么我就要
在path这个环境变量中,把目录添加上去。

windows等操作系统,除了在当前目录下查找,还会去path环境变量指定的目录下搜索命令。

【计算机】-》右键-》【属性】-》【高级系统设置】-》【高级】-》【环境变量】

【用户环境变量】只针对当前用户(操作系统登录的用户)
【系统环境变量】针对所有用户的

path=D:\ProgramFiles\Java\jdk1.8.0_141\bin;之前的环境变量的值
说明:;必须是英文状态下,半角输入,用于和其他原有的环境变量的分割
Win7
D:\ProgramFiles\Java\jdk1.8.0_141\bin;D:\ProgramFiles\mysql\mysql-5.6.26-winx64-server\bin;D:\ProgramFiles\tomcat\apache-tomcat-8.0.24\bin;d:\ProgramFiles\2345Soft\HaoZip;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Lenovo\Fingerprint Manager Pro\;C:\Program Files (x86)\Common Files\Lenovo;C:\SWTOOLS\ReadyApps;D:\ProgramFiles\MySQL\MySQL Server 5.5\bin

Win10
表格形式,一行一个环境变量

Java程序的开发步骤:

(1)编写代码

要求:保存为.java的源代码文件

(2)编译代码

目的:把.java源文件编译为.class的字节码文件(因为JVM只认识字节码文件)

编译工具:javac.exe

如何使用编译工具:

  格式: javac 原文件名.java

  例如:   javac HelloWorld.java

(3)运行字节码文件

运行工具:java.exe

如何使用运行工具:

  格式:java 字节码文件名或者类名称

  例如:   java HelloWorld

保存快捷键:Ctrl + S

*/
class HelloWorld{
    /*
        Java程序的主方法,是Java程序运行的入口
    */
    public static void main(String[] args){
        /*
            输出语句:""中的内容,表示需要原样输出的内容
        */
        System.out.println("Hello Java!");
    }
}

 

/*
问题1:乱码问题

1、原因
计算机的世界中只有0和1,
人类世界中字符是很丰富的。

最早人类使用计算机时,硬件机器语言,00000011100001111
后来,为了使用计算机的人方便,开始引入了助记符等,可以表示更丰富的字符等信息
ASCII码:数字十进制的65表示字符A,计算机底层把65十进制再转为二进制
最早ASCII码只能表示128字符
后来计算机不仅仅在美国了,会流传到其他国家。
各个国家在ASCII码基础上扩展了128个,变成256个了,但是后面扩展的128个不具有通用性。
甚至计算机传入亚洲,就开始出现多字节编码,
例如:中国GB2312,后来的GBK,台湾等地区Big5等
越来越多的字符编码出现,但是各国之间的文档交流出现问题。

计算机希望在全世界范围能够无障碍的交流,开始引入万国码,Unicode编码表,
这个编码表,可以用它的规则表示全世界所有的字符,每一个字符都有自己唯一的编码。

Unicode编码表只说了,字符用什么数字表示,但是这个数字范围跨度很大,有
1个字节的,2个字节的,3个字节的,4个字节等,在网络传输中出现问题,
例如,我收到4个字节的数据时,该表示为4个字符呢还是1个字符呢,
后面为了解决传输的问题,出现了UTF-8等编码方式,规定了,
到底几个字节是一个字符。

不同的编码方式对同一组数据解析出来的字符是不同的

2、如何解决
统一编码

修改当前源文件的字符编码:
方式一:【编码】菜单--》转为ANSI(与当前操作系统一致)编码

如果希望之后建立的源文件,都是与ANSI编码一致的,那么可以这样做:
方式:【设置】菜单-->【首选项】--》【新建】--》[ANSI]编码
*/
class Problem1{
public static void main(String[] args){
System.out.println("柴林燕是大美女!");
}
}

/*
问题2大小写问题
(1)源文件名.java的大小写问题
源文件名不区分大小写,但是我们强烈建议大家还是注意大小写
(2)字节码文件名(类名)
严格区分大小写的
(3)代码中大小写问题
严格区分大小写
*/
class Problem2{
public static void main(String[] args){
System.out.println("大小写问题");
}
}

/*
问题3:格式问题(为了好看)
(1){}问题
风格1:推荐风格
class 类名{
    方法{
        System.out.println();
    }
}

从右边往左边看,结尾要么是{,},要么是;

风格2:延续老的C语言风格
class 类名
{
    方法
    {
        
    }
}
不建议混搭

风格3:不建议
class 类名{
    public static void main(String[] args){
        System.out.println("hello");        
                                        }}

(2)缩进问题
class 类名{
Tab键public static void main(String[] args){
Tab键Tab键System.out.println("xxx");
Tab键}
}        

往右缩进:Tab键
往左回缩:Shift + Tab键                                
*/
class Problem3{
    public static void main(String[] args){
        System.out.println("xxx");

        for(int i=0; i<5; i++){
            System.out.println("yyy");
        }
    }
}
/*
问题4:源文件名和类名的问题
1、源文件名和类名一致
javac 源文件名.java
java 类名

例如:
javac Problem4.java
java Problem4

2、源文件名和类名不一致
javac 源文件名.java
java 类名

例如:
javac Problem4.java
java Other

在cmd命令行,如何重新运行之前执行过的命令?
按↑,查找之前的命令
按↓,查找某个之后的命令

3、如果某个类是public,那么这个类必须与源文件名一致
换句话说,一个源文件只能有一个public类

4、一个源文件可以编写多个类吗?如果可以,编译后会怎么样呢?
如果一个源文件有多个类(源文件内部),那么编译后会产生多个.class文件(字节码文件)。
字节码文件名就是类名。

平时开发中,一个.java文件,只写一个类,除非有内部类。
而且源文件名和类名一致。(因为后期好维护)
*/
public class Problem4{
    public static void main(String[] args){
        System.out.println("源文件名和类名一致");
    }
}

class Other{
    public static void main(String[] args){
        System.out.println("源文件中有另一个类");
    }
}

class Three{
    
}
/*
练习1:打印个人信息

(1)数据类型
"柴林燕" -->字符串
18-->整数,整型
'女'-->字符,单个字符
true-->布尔值,逻辑值,它只有两种情况,true和false
40.5-->小数类型
(2)常量
字符串常量必须用""(双引号)
单字符常量,必须用''(单引号)
其他整数、小数、布尔等不需要加符号。

System.out.println(xx);  输出xx之后换行,ln==line
System.out.print(xx);输出xx之后不换行,下面的输出内容就会接着输出
*/
class TestExer1{
    public static void main(String[] args){
        System.out.println("柴林燕");
        System.out.println(18);
        System.out.println('女');
        System.out.println(true);
        System.out.println(40.5);
        System.out.println("--------------------------------");
        
        System.out.print("姓名:");
        System.out.print("柴林燕");
    }
}

/*
标识符:在Java中对类名、变量名、方法名等这些要素进行命名的字符序列称为标识符。
通俗的理解:凡是程序员自己命名的地方都叫做标识符。

1、标识符的命名规则(必须遵守,否则编译或运行错误)
(1)Java的标识符必须用26个英文字母的大小写、数字0-9,美元符号$,下划线_
(2)Java的标识符不能使用关键字(包含保留字)和特殊值
例如:class,public,static,void等
一共不能用的有50个关键字+3个特殊值
(3)不能使用空格
(4)数字不能开头
(5)Java的标识符严格区分大小写

2、标识符的命名规范(建议遵守,不遵守会被鄙视)
(1)见名知意
让别人一看就知道这个类、变量、方法的意义在哪里。

(2)类名、接口名等,要求每一个单词的首字母大写,形式:XxxYyyZzz
例如:HelloWorld,BiaoShiFu

(3)变量名、方法名等:要求从第二个单词开始,首字母大写,其余字母小写,
形式:xxxYyyZzz
例如:main()方法,println()方法,print()方法,nextInt()方法

(4)包名等:要求所有单词都小写,每个单词之间使用.分割
形式:xxx.yyy.zzz
例如:java.lang,java.util,java.io,java.text,java.time等

(5)常量名:要求所有单词都大写,每个单词之间使用_分割
形式:XXX_YYY_ZZZ
例如:PI(圆周率),MAX_VALUE(最大值)

*/
//class Biao Shi Fu{}//错误的,因为包含空格
//class 2Test{}//错误的,数字不能开头
class BiaoShiFu{
}

/*
Define:定义,声明
Use:使用
Variable:变量

变量使用的原则:
(1)先声明后使用
包括后面用到的类、方法等,都是遵循先声明后使用
(2)变量必须先初始化(第一次赋值)再访问它的值(打印、计算、比较操作)
(3)变量的声明,在同一个作用域中,只能声明一次,但是赋值可以很多次
作用域:从变量声明处开始,到它所属的{}结束

1、如何声明一个变量?
格式:
数据类型 变量名;

2、如何给变量赋值?
格式:
变量名 = 变量值;


常用的变量的数据类型(刚开始):
int(整数)
double(小数)
char(单个字符)
String(字符串)
*/

class DefineAndUseVariable{
    public static void main(String[] args){
        //int age;//声明
        //age = 18;//赋值
        
        //也可以把声明和第一次赋值合并成一句
        int age = 18;
    //    int age = 19;//错误的,第二次赋值不用再加数据类型
        age = 19;//第二次赋值
        System.out.println(age);
        
        if(true){
            int num = 0;
        }
        //System.out.println(num);//错误的,出了num的作用域
        
        String name = "柴林燕";//字符串的常量必须用""(双引号)
        char gender = '女';//单字符的常量,必须用''(单引号)
        double weight = 40.5;//小数类型
        boolean marry = true;//布尔类型    真的,假的,成立,不成立
        
    }
    
    public static void test(){
        //System.out.println(age);//错误的,出了age的作用域
    }
}
/*
练习2:打印个人信息
个人信息使用变量保存
*/
class TestExer2{
    public static void main(String[] args){
        String name = "柴林燕";
        int age = 18;
        char gender = '女';
        double height = 152.0;
        double weight = 40.5;
        boolean marry = true;
        
        System.out.println(name);
        System.out.println(age);
        System.out.println(gender);
        System.out.println(height);
        System.out.println(weight);
        System.out.println(marry);
        System.out.println("---------------------");
        
        /*
        ""中的内容,原因显示
        name是变量,在显示的时候,不是显示name单词,而是把name变量中存的值取出来显示,所以这里name不加""
        "姓名:" + name:把姓名:和name变量中的值拼接起来一起显示
        */
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("性别:" + gender);
        System.out.println("身高:" + height);
        System.out.println("体重:" + weight);
        System.out.println("是否已婚:" + marry);
    }
}
/*
Java中的数据类型:
(1)基本数据类型(8种)
(2)引用数据类型(今天不讲)
String是引用数据类型

一、基本数据类型
1、整型系列
byte: 字节类型 范围:-128~127
    1个字节
short:短整型
    2个字节  范围:-32768~32767
int:整型
    4个字节  范围:....
long:长整型
    8个字节
    说明:对于long类型的常量,需要加大写L(建议用大写)或小写l

2、小数类型,浮点型系列
float:
    单精度浮点型,4个字节,
    大概的精度范围是,把小数用科学记数法表示后,小数点后6~7位
    说明:float类型的常量,需要在数字后面加F或f
double:双精度浮点型,8个字节
    大概的精度范围是,把小数用科学记数法表示后,小数点后15~16位
    

3、字符类型
char:单字符类型,2个字节,可以表示汉字
    在Java中是使用Unicode编码表表示。(兼容ASCII码)
    每一个字符都有一个唯一的Unicode编码值。
    例如:
        数字0,Unicode编码值是48
        数字1,Unicode编码值是49
        ...
        字母A,Unicode编码值是65
        字母B,Unicode编码值是66
        ...
        字母a,Unicode编码值是97
        字母b,Unicode编码值是98
        ...
如何表示char类型的字符常量呢?
(1)'一个字符',例如:'女','A'    
(2)'转义字符',例如:'\n'(换行),'\t'(制表位Tab键),
                    '\\'(斜杠),'\"'(双引号),'\''(单引号),
                    '\b'(删除键Backspace),'\r'(回车键)    
(3)'斜杠u字符的Unicode编码值的十六进制形式'

4、布尔类型
boolean:只能存两个值之一:true,false
一般boolean的值用于条件判断


计算机表示数据用二进制表示,即0和1
那么一位0或1,我们用bit(位),最小单位
计算机中最基本的单位用的byte字节,
1字节 = 8位
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
...

扩展:
    硬件厂商存储单位用1000进位,不是1024.
    带宽  100Mb,b = bit

*/
class TestType{
    public static void main(String[] args){
        boolean marry = false;
        if(marry){//marry中的值为true,就表示条件成立
            System.out.println("已婚");
        }else{
            System.out.println("未婚");
        }
        System.out.println("--------------------------");
        
        byte b = 127;
        long tel = 18201583096L;
        
        float f = 1.2F;
        
        char shuang = '"';//这样可以,表示单个字符
        System.out.println(shuang);
        System.out.println("柴老师说:\"今天天气真好\"");//这里要输出双引号,需要转义
        
        char shang = '\u5c1a';
        System.out.println(shang);
    }
}
/*
练习3:
声明一些变量,来保存,一份图书信息:
书名:
作者:
价格:
销量:
库存量:
是否是促销产品:

*/
class TestExer3{
    public static void main(String[] args){
        /*
        String的S是大写的
        */
        String bookName = "《从入门到放弃》";
        String author = "柴林燕";
        double price = 100.0;
        int sale = 0;
        int amount = 100;
        boolean cu = true;
        
        System.out.println("书名:" + bookName);
        System.out.println("作者:" + author);
        System.out.println("价格:" + price);
        System.out.println("销量:" + sale);
        System.out.println("库存量:" + amount);
        System.out.println("是否促销:" + cu);
    }
}

 

posted @ 2020-07-17 14:58  窦云鹏  阅读(150)  评论(0编辑  收藏  举报