1. Java发展历史

1995年美国Sun公司向公众推出Java

2009年Oracle公司宣布正式以74亿美元的价格收购Sun公司,Java商标从此正式归Oracle所有

Java不仅仅是一门编程语言,同时也是一个技术平台

Java是当今最流行的软件开发语言之一,企业版本使Java具有更广泛的用途,适用于各种应用开发,尤其是网络应用,网络服务,嵌入式系统等

2. Java版本

1995年发布java1.0版本

1997年发布java1.1版本

1998年发布java1.2版本,里程碑版本,开始拆分为JavaSE、JavaEE、JavaME三个技术方向

2000年发布java1.3版本

2002年发布java1.4版本

2004年发布java1.5版本,在语法易用性上有了很多改变

2006年发布java1.6版本

2011年发布java1.7版本

2014年发布java1.8版本

3. Java1.2版本里程碑的版本,有了技术方向划分

JavaSE:标准版。是其他版本的核心基础,能用于开发桌面应用系统

JavaEE:企业版。用于开发企业级应用

JavaME:微型版。可以用于嵌入式设备系统

4. Java运行的5个步骤

编写源程序-编译源程序-装载-校验-运行

java Bigdecimal 相乘后 保留小数_java bigdecimal加减乘除

5. Java虚拟机

Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。不同的操作系统有不同的虚拟机。

java Bigdecimal 相乘后 保留小数_java 取整型的低八位_02

6. Java语言特点

1)平台的无关性 一处编写,处处运行。跨平台(跨操作系统),同一套java程序在不同的操作系统中运行。JVM(java虚拟机)

2)面向对象 Java是一门面向对象的语言;面向对象(Object Oriented)简称OO

面向对象的三大特征:封装、继承、多态

面向对象与面向过程截然不同两种编程思想

3)健壮性=鲁棒性

异常处理机制、强类型机制要求每一个数据要有明确的数据类型、没有指针,GC垃圾回收机制,自动释放内存

4)分布式

提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等;

Java的RMI(远程方法调用)机制是开发分布式应用的重要手段;

5)多线程

java语言支持多线程编程,Java可以并发执行,Java提供同步机制允许共享数据

6)动态性

允许程序动态地装载运行过程中所需要的类;也可以通过网络来载入所需要的类;

Java中能进行运行时的类型检查

7. JDK、JRE、JVM关系

1)JDK是Java开发工具包(Java  Development Kit)的简称,是一个软件。如果要用Java语言编写程序,就必须在计算机上安装JDK

2)JRE是Java运行环境(Java  Runtime Environment)的简称。如果要在机器上运行Java程序,就必须要有JRE;

3)JVM(Java Virtual Machine)称为Java虚拟机,在Java平台中有着举足轻重的地位;

JVM可以理解为Java编译器和操作系统间的虚拟处理器;编译器编译出的字节码只要JVM认识即可;JVM再将字节码解释成操作系统认识的机器码;只要需要运行Java程序的设备,都需要安装JVM;

JDK>JRE>JVM

java Bigdecimal 相乘后 保留小数_java 位运算_03

8. 第一个java类

Java是面向对象的语言,面向对象的语言的程序的组成单位就是“类”;

使用关键字class可以声明类

如果类用public修饰的,要求:.java文件名和类名必须保持一致,大小写也要保持一致。如果类没有用public修饰的,文件名和类名可以不一致。但是,编译时产生的文件的名字和java类的名字保持一致。

9. 输出

输出换行System.out.println("hello world");

输出不换行System.out.print("hello world");

10. 

类前面常常使用public修饰,成为公共类,具体含义暂时不用理解,后续将学习;

然而,用public修饰的类所在源文件命名就有要求:.java文件的名字必须与源文件中的class名字完全一致,大小写也需要一致;

在一个.java文件中可以有多个Java类;

最多只能有一个public类;

也可以没有public类;

实际编程中,尽量不要在一个文件中存在多个类,因为可读性比较差;

11. 注释

单行注释 //

多行注释 /*    */

文档注释 /**   */一般用于对类和方法进行功能说明文档注释

12. 标识符

程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括:类名、变量名、常量名、方法名等等

标识符组成:字母、数字、下划线_、美元符号$。注意:标识符不能以数字开头。注意:避开关键词

13. 转义字符

转义字符

说        明

\n

换行符,将光标移到下一行

\r

回车符,将光标移到当前行的开头

\t

制表符,将光标移到下一制表位

\\

输出反斜线

\'

输出单引号

\"

输出双引号

14. 输入

1)从控制台输入语句:

实例化Scanner对象Scanner input = new Scanner(System.in);

其中,input是Scanner对象的名称,可以随意改。使用时需要导包:

import java.util.Scanner;

2)接收控制台的输入的语句:

int num=input.nextInt();//整形

String str=input.nextLine (); //字符串

char ch=input.next().charAt(0); //字符

15. 字符集(Charset)

是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等 ;

常见的字符集有:ASCII字符集、GB2312字符集、Unicode字符集等;

在计算机科学领域中,Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统;

Unicode制定了三套编码方式,分别是UTF-8,UTF-16和UTF-32;通常使用UTF-8方式;

UTF-8用1到4个字节编码Unicode字符;它可以用来表示Unicode标准中的任何字符,UTF-8是ASCII的一个超集;

对于单字节的字符,字节的第一位为0,后面7位为这个字符的unicode码。对于英语字母,UTF-8编码和ASCII码相同;

对于n字节的字符(n>1),第一个字节的前n位都为1,第n+1位为0,后面字节的前两位一律为10;剩下的为这个字符的unicode码。

Java语言使用Unicode字符集;Java中的字符串都用Unicode字符集编码;

ASCII字符集 a值97   A值65

16.     数据类型划分的意义

不同的变量有不同的用途,例如,可以用变量来表示年龄,或者用变量来表示成绩。而年龄只能是整数,而成绩却可能出现小数;

如果不把数据划分为不同的类型,那么就没有办法区分出数据之间的差别;

计算机可以根据不同的数据类型,把数据“合理”地存放到内存中;

计算机从内存中读取数据时,也可以根据其数据类型就能确认取到的数据的特征,从而正确地去处理;

17. 数据长度

每种数据类型在内存中占有不同的长度;

计算机存储设备的最小信息单元叫“位(bit)”,又称之为“比特位”;

连续的8个位成为1个“字节(byte)”;

操作系统分配内存最少1个字节,即8 个位,而不是1个位;

长度越长,所表示的范围就越大;

18. java中的数据类型

Java中有两种数据类型分为基本数据类型和引用数据类型

1)基本的数据类型=原始的数据类型:8种

数值型:整形 byte\short\long\int

浮点型float\double

字符型 char

布尔型 boolean

2)引用的数据类型:类、接口、枚举、注解、数组

注意:String是引用的数据类型

类型

长度(位)

长度(字节)

表示范围

byte

8位

1字节

-128~127(-27~27-1)

short

16位

2字节

-32768~32767(-215~215-1)

int

32位

4字节

-2147483648~2147483648(-231~231-1)

long

64位

8字节

-263~263-1(-263~263-1)

float

32位

4字节

-3.403E38~3.403E38

double

64位

8字节

-1.798E308~1.798E308

char

16位

2字节

0~216-1表示一个字符,如(‘a’,‘A’,‘0’,‘中')

boolean

8位

1字节

只有两个值true与false

19. 数据类型的默认值

类型

默认值

byte

0

short

0

int

0

long

0

float

0.0

double

0.0

 char

‘’ 空字符(\u0000)

 boolean

false

小数默认是double类型;

使用f/F后缀显式表示float类型;使用d/D后缀显式使用double类型;

1.5数据类型 默认表示是double类型

1.5f数据类型 表示是float

100 数据类型  默认表示是int类型

20. 数据类型自动转换分类

自动类型转化=隐式转换:从表示范围小的类型转换成表示范围大的类型

强制类型转换=显示转换:从表示范围大的类型转换成表示范围小的类型

注意:数据类型转换前提,数据类型兼容

基本的数据类型的赋值用“=”可以为任何一种基本数据类型的变量赋值;

赋值时主要不要超过表示范围,否则将出现编译错误

char类型使用’’引用单个字符赋值;也可以使用非负整数进行赋值

21. 比较运算

可以使用==、!=、>、<、>=、<=对基本数据类型的数值进行比较运算,返回结果为boolean型

注意:比较的是数值的二进制;

22. 数据存放

数据都是存放在内存中,了解Java内存的基本结构有助于深入理解数据类型;

Java内存大体可以分为堆、栈、常量池、方法区,目前只了解各区域基本特征

23.  基本的数据类和引用的数据类型区别

在函数(方法)中定义的基本数据类型变量存储在栈中;

引用类型实例的引用(reference)也是存储在栈中;

引用类型实例的成员变量,存储在堆中;

基本数据类型

引用类型

存放位置

栈内存

地址(引用)存在栈内存,内容存在堆内存

赋值

用=直接赋值

用new创建对象赋值

注意:包装器类型和String类型比较特殊,除了用new创建对象赋值,也可以用=直接赋值

24.  包装器类型   将基本的数据类型转换成引用的数据类型

基本的数据类型

byte

int

long

short

float

double

char

boolean

包装器类型

Byte

Integer

Long

Short

Float

Double

Character

Boolean

25. 思考

1)一个.java文件中能不能包含多个类?

一个.java文件中不能包含多个被public修饰的类。

一个.java文件中能包含多个没有被public修饰的类。并且在编译时,会把每一个类的class文件单独生成。

2)一个.java文件中如果能包含多个类,文件名和谁保持一致?

一个.java文件中如果能包含多个类,前提是最多只能有一个类是用public进行修饰的,文件名称必须和其中用public修饰的哪个类的名称保持一致。

3)如果要比较两个字符串的字典顺序,如何实现?能否用>、<?

不可以用>、<   String类中有compareTo()按字典顺序比较两个字符串。

4)当只声明了一个引用类型变量,却没有为其赋值,则此时该变量为null;

一个字符串是null,与一个字符串是””是否一样,有什么区别?

答案:不一样。

null不指向任何对象,相当于没有任何值;而“”代表一个长度为0的字符串

null不分配内存空间;而“”会分配内存空间