一、java概述
- 创建时间:1991年,命名OAK,是SUN公司推出,1995开始以java名义推出
- 创建人:Java之父詹姆斯·高斯林
- 分类:JavaSE,JavaEE,JavaME
二、特性
- 面向对象,跨平台,自动垃圾回收,多线程(jvm四大特性)
- java是准动态强类型解释性语言(动态主要体现在反射机制)
-
编译型语言 : 运行之前,先把源文件,通过指定的编译器生成 机器码文件,可以让计算机直接识别
优点 : 只需要编译一次,就可以运行多次,执行效率高
缺点 : 跨平台性能差
-
解释型语言 : 每次运行之前,都对源文件进行解释,解释为当前操作系统可以识别的语言
优点 : 跨平台较好
缺点 : 每次运行都需要解释,执行效率低C
-
动态语言 : 使用变量的时候,不需要指定类型,类型在赋值的时候确定,而赋值是在运行时
-
静态语言 : 使用变量的时候,必须先指明类型
-
强类型语言 : 一旦类型确定,不可以更改,但是可以强制更改
-
弱类型语言 : 可以根据上下文环境,对类型进行动态更改
三、运行机制
四、注意事项
(1)注释
-
单行注释
//这是单行注释,元数据(描述数据的数据),对内容进行描述,不会被jvm解析
-
多行注释
/*
*这是一行多行注释
*/ -
多行注释(文档注释)
/**
* 多行注释,可以使用javadoc生成文档
*/
(2)关键字解释
public calss Hello{
//public :公共的
//class:定义类的关键字,表示定义一个类
//Hello:类名
//static:静态资源
//入口程序,固定写法
public static void main(String[] args){
}
}
(3)、易错点
- 入口方法main的拼写
- 大小写错误,java中严格区分大小写
- 标点符号使用(注意区分中英)
- 多次保存,以免忘记保存
-
命名规则
只能是 大小写字母a-zA-Z , 数组0-9 , 下划线 _ , 美元符号 $ 且数字不能开头
不能使用关键字和保留字
关键字 : java中已经被使用的单词,public,class,void,static,int,byte....
保留字 : java中还没有使用的关键字,但是可能后续新版本中会使用到 goto
不能单独使用关键字和保留字,比如 piblic1 或者classpublic 是没问题的
建议:望文知义使用驼峰命名法(例:ZhangAo)、类名首字母大写、变量名和方法名首字母小写、文件名,类名,方法名,变量名,包名
五、存储原理
- 程序 : 一堆命令的集合
- 程序源代码 : 源码
- 文件类型 : 文本文件,二进制文件,可执行文件
- 源文件:就是文本文件
- 二进制文件:01010100011 给计算机看的
- 可执行文件:程序就是可执行文件,比如exe
- 编辑器 : 编写文本文件的工具
- 编译器 : 把文本文件转换为二进制文件,叫编译
(1)、数据的储存
数据想要运算,必须先存储
(2)、存储方式
内存 : 两端无限延伸的线
硬盘 : 螺旋线
光盘 : 同心圆
(3)、存储单位
Bit : 比特,1bit就是一个电子位,统称位
Byte : 字节 , 1字节= 8bit 8位
Short : 短整型 , 1short= 16bit
Int : 整型 ,1int = 32bit
Long : 长整型 , 1long=64bit
例: byte , 8位 最大值就应该是 2^7-1 2的7次方减1 255,但是为了保存负数,最高位为符号位,直接损失一半精度(1 表示负数, 0 表示正数)
1 二进制 00000001
2 二进制 00000010
负数保存补码
-1 二进制 10000001 反码 11111110 补码 (反码+1) 11111111
-2 二进制 10000010 反码 11111101 补码 11111110
(4)、进制
二进制 : 010101010 并且 java中没有办法表示二进制
八进制 : 满8进1 , 10 就等于 十进制的 8 ,java中 0开头 比如 010
十进制 : 满10进1 , java中 非0开头, 20 , 324
十六进制 : 满16进1,a表示10,b表示11 , cdef ,f表示15 ,java中 0x开头,比如 0x11
六、数据类型
(1)、概述
数据类型:本质就是规定占用空间的大小,一般用字节表示
(2)、分类
基本数据类型:
-
数值型:
整型:
byte 字节 8bit -128~127
short 短整型 16bit
int 整形 32bit
long 长整形 64bit
浮点型:
float 单浮点 32bit
double 双浮点 64bit
-
字符型:
char 字符 16bit
-
布尔型:
boolean 布尔 8bit
(3)、类型使用
①、整形
public class _01_int {
public static void main(String[] args) {
// 使用int类型定义一个32位的空间,并命名为i_1,空间中赋值 10
int i_1 = 10;
int i_2 = 017;
int i_3 = 0x10;
// 想控制台打印
System.out.println(i_1);
System.out.println(i_2);
System.out.println(i_3);
// 等于是把int的值,自动转换为long类型的值,会发生转变
long l_1 = 214748364;
// long类型的值,需要在尾部加 L / l , 推荐使用大写,否则 l和1不好分清
long l_2 = 214748361231248L;
byte b1 = 127;
short s1 = 32767;
}
}
②、浮点型
/**
* float 4byte 32 bit
*
* double 8 byte 64 bit
*
* 默认的小数 是double , 0.0
*
*/
public class _02_Double {
public static void main(String[] args) {
// float的值 必须加F/f 不区分大小写
float f_1 = 2.2F;
// 强制转换为float类型
float f_2 = (float)2.2;
double d_2 = 2.3;
}
}
③、字符型
/**
* char是字符型,用英文单引号表示 '',并且 单引号中 只能有一个字符
* char占用两个字节,16位 范围是 0~65535
* short也是16位,但是范围是 : -32768 - 32767 , 因为需要负数,而char不需要负数
*
* 字符型 不是 字符串型
* 字符和整型之间有一个对照表,ASCII码
*
*/
public class _03_char {
public static void main(String[] args) {
char c_1 = '张';
int i_1 = c_1;
System.out.println(c_1);
System.out.println(i_1);
}
}
④、布尔型
/**
* java中的布尔型 : 只有true和false
*
* 占用1字节,全是0 是false , 0000 0001 是true
*
* 一般用于判断操作
*
* 布尔类型 默认为false
*
*/
public class _05_Boolean {
public static void main(String[] args) {
boolean flag = true;
if (flag) {
System.out.println("我们去看电影把");
}else{
System.out.println("你谁呀?");
}
}
}
⑤、类型转换
**
* 1 八种基本类型中,除了boolean类型之外,其他的都可以相互转换
*
* 2 低精度到高精度 是自动转换(隐式转换), 高精度到低精度是强制转换(显式转换)
* byte -> short -> int -> long -> float -> double
* char ->
*
* 多种数据类型混合运算中,结果的类型是 参与运算的最大的类型
*
* 注意 byte,short char ,int 任意一种或多种进行运算,结果都是int
*
* 强制转换 , 可能造成数据出错
*
*/
public class _06_datachange {
public static void main(String[] args) {
short s1 = 1;
// 强制转换 (类型) 值
char c1 = (char) s1;
// 自动转换
int i1 = c1;
long l1 = 2;
float f1 = l1;
byte b1 = 1;
int i = 10/3 ;
System.out.println(i);
int i3 = 256;
byte b2 = (byte)i3;
System.out.println(b2);
}
}
(4)、补充
①、java中不能表示2进制,但是可以可以表示8进制,10进制
/**
*
* java中不能表示2进制
* 八进制 : 012 , 值是以0开头,表示是八进制的值
* 十进制 : 非0开头的,就是十进制 12312
* 十六进制 : 0x10 ,值是0x开头的,表示是十六进制的值
*
*/
public class _01_int {
public static void main(String[] args) {
// 使用int类型定义一个32位的空间,并命名为i_1,空间中赋值 10
int i_1 = 10;
int i_2 = 017;
int i_3 = 0x10;
}
}
②、转义字符
转义字符 | 意义 |
\n | 换行 |
\t | 横向跳格tab |
\v | 竖向跳格 |
\b | 退格 |
\r | 回车 |
\\ | 反斜杠"\" |
\' | 单引号"'" |
\" | 双引号""" |
*\u4e2d | Unicode码 |
③、默认值
类型 | 默认值 |
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0F |
double | 0.0 |
char | '\u000' |
bolean | false |
七、变量
(1)、常量
/**
* 常量 : 常量在程序生命周期之内,值不可更改
生命周期 : 开始执行到执行结束
字面量/直接量 : 没有明确表示空间存储,不能重复使用
*
*/
public class var_01 {
public static void main(String[] args) {
int i = 10;
System.out.println(i);
// 不能重复使用,占用临时的int空间
System.out.println(10);
// 常量,值不能更改
final int c = 10;
// c=2;
System.out.println(c);
}
}
(2)、变量
全局 :
在类之外创建,所有类都可以直接访问,不需要二次引用,所谓二次引用 就是不需要使用 . 进行操作 xxx.xxxx
Java 中不允许在类之外创建变量,但是可以将一个类的变量设置为public static 修饰,那么其他类也是可以访问到该变量的,不过需要使用类名.变量名进行引用,所以java中是没有全局变量和函数的
全局变量安全性较差,更容易造成命名冲突问题,所以java中引入了包机制,所以引用一个变量的时候必须使用包名和类名才能引用
/**
* 变量 : 在运行过程中,可以更改的数据
*
* 也可以理解为 有名字的内存空间
*
* 变量声明 :
* 数据类型 变量名 = 值;
* 数据类型划分内存空间大小, 给空间取名字 赋值(把数据保存到空间中)
*
* 作用域 :
* 一个大括号 {} 就是一个作用域,一个变量的使用范围,不会超过包含它的这个大括号
* 不会超过向上碰到的第一个包含它的大括号,但是向下穿透
*
* 变量分类 :
*
* 局部变量 : 方法内部声明的变量,是局部变量,只能在方法中使用,并且直接写变量名即可
*
* 成员变量 : 类体中,没有使用static修饰的变量 ,就是成员变量,对象相关
*
* 静态变量 : 类体中使用static修饰的变量,就是静态变量,类相关
*
*
* 变量调用 :
* 变量都不能先使用后声明
* 局部变量 : 在方法中 直接写变量名即可,并且局部变量 不赋值 不能使用,没有默认值
* 静态变量 : 类名.静态变量名调用,当前类中调用当前类 的静态变量,类名可以省略,有默认值
* 成员变量 : 对象.成员变量名,有默认值
*
* 局部变量可以和静态/成员变量同名, 局部变量优先级高
* 可以使用 类名.静态变量名 来区分 同名的静态变量和局部变量
*
* 整型 : 0 , 浮点型 : 0.0 , 布尔型 : false , 字符型 : \u0000
*
*/
public class var_02 {
// 成员变量
int a = 1;
// 静态变量
static int b = 2;
public static void main(String[] args) {
// 不能先使用后声明
// System.out.println(i);
// 局部变量
int i = 20;
System.out.println(i);
int x = 0 ;
System.out.println(x);
// 静态变量调用
System.out.println(var_02.b);
System.out.println(b);
int b = 1;
// 使用的是局部变量b
System.out.println(b);
// 使用的是静态变量b
System.out.println(var_02.b);
// 同时创建多个变量并赋值
int i1=1,i2=2,i3=1;
// 只有i6有值
int i4,i5,i6=1;
}
}