Java语言基础
1. Java简介
- Java是一门高级程序语言,由高级语言编写的程序必须先被翻译成低级程序语言才能运行
- 程序通常指完成某些事情的一种既定方式和过程可以将程序看成对一系列动作的执行过程的描述。
- 完成解释任务的程序叫解释器,解释器会按行(一行一行的读取)对程序进行翻译,然后执行命令。
- 完成编译任务的程序叫做编译器,它会在高级语言执行之前一次性对该程序进行完整的编译,所以程序的运行是在编译过程之后。我们一般把这种高级语言称为源代码(source code,我们经常说的coding 就是写源代码),编译器生成的程序称为可执行程序
- 编写源程序 -> 编译源程序(javac) -> 运行编译后的程序(java)
- 计算机程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合
- Java比较强大,它既可以被编译也可以被解释,不同的是Java 编译过程并不生成机器语言,而是生成字节码。字节码和机器语言一样,但是它具备高级语言的可移植性,因此在一台机器上编译Java,在另外一台机器上也可以被解释运行。这正是Java语言在诞生的时候就瞬间超越了其他语言的核心原因:一次编写到处运行。
- 除了生成字节码之外,Java还创建了JVM (Java virtual machine, Java虚拟机),通过JVM支持了字节码的解释运行.
- 要实现跨平台必须要有虚拟机,核心技术是虚拟机技术
1. Java核心机制–垃圾回收机制
垃圾收集的目的在清除不再使用的对象,当对象建立的时候垃圾收集期,就开始监控对象的动态情况,垃圾收集主要是对内存的释放。创建对象的时候申请一个空间
- 不再使用的内存空间应回收 —>垃圾收集;
- Java 消除了程序员回收无用内存空间的职责;提供一种系统级线程跟踪存储空间的分配情况。在VM的空闲时,检查并释放可被释放的存储器空间;相比c++,开发人员负责要自己收回无用内存。
- 垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预;
- GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄露。
2. 用记事本编写程序
-
创建一个文件,如:Test.java,首字母必须大写,以.java为后缀,不能以数字开头,不能有空格和特殊字符
-
定义一个类,类名必须跟文件名一致
-
写好程序后编译:cmd+r中找到对应的程序然后编译
如:javac Test.java
-
编译完后会出现一个对应的CLASS的文件,即字节码文件
-
然后输入:java Test
-
程序就会运行出结果
2. Java的基本编码规范
-
类名用public修饰
-
一行只写一条语句
-
花括弧{}的使用位置
-
代码的缩进
-
Java程序名–类名的命名规则–帕斯卡命名规则
首字母单词大写 StudentName ,HelloWord
1.包名命名规则
-
包名要求
- 所有名称都要小写
- 层级之间用.隔开
- 命名方式:公司域名倒写 com.iweb.项目名/模块名.类名
学校.年级.班级.Student 学校 年级 班级 Student 从大到小
3.标识符,关键字,字符集
1. 标识符
- 标识符:Java中用于区分数据而需要我们自己定义的名称
- 允许使用字母数字_$
- 不允许使用数字不能开头不可以是java中的关键字
- 驼峰式命名
- 见名知意
- 常见的标识符:包名,类名,方法名,变量名,参数名
- 除了类名首字母大写其他标识符首字母都要小写
2.关键字
4. Java代码注释
1.块注释
- 一般再Java类的声明上,方法上使用块注释,用来解释清楚类和方法的作用
- 必须以/**开头, */结尾
/**
* 注释内容
* 注释内容
*/
2.行注释
-
注释一行
// 这行代码是注释
5. 变量和数据类型
1.变量含义
-
顾名思义在使用中可以变的量为变量,变量用于存储一些内容,在计算机中等同于一个有命名的存储地址。
-
变量的声明还不会在内存上开辟内存来存储数据,在变量赋值后才会开辟内存空间来存储这个值
2.变量的声明and赋值
-
声明的变量是什么类型,对应的赋值就要是什么类型
-
存储数据的行为就叫做:赋值
// 数据类型 变量名 int money; // 到银行开户 money = 100; // 开户后存100元到账户中 // 第一步和第二步合并 int money = 100; // 开户的同时,存100元到账户里 System.out.println(money);//输出变量
3.命名规则
-
驼峰规则:首字母由 小写字母 或 下划线_ 或 $符号 ,不能使用系统关键字
-
首字母 其他字母 小写字母 或下划线_ 或$ 数字 或 字母 或 下划线_或 $符号 -
正确示例:name、username、_name、$name、myName
-
错误示例:12name 、name+、#name、name#
4.数据类型
1.种类
- 8中基本数据类型
序号 | 数据类型 | 说明 |
---|---|---|
1 | byte | 8位整数 -128(-2^7)至 127(2^7-1) 1个字节 byte money = 100; |
2 | short | 16 位整数 -32768(-2^15)至 32767(2^15 - 1) 2个字节 short monye = 100; |
3 | int | 32位整数 -2^31 至 2^31 - 1 4个字节 int money = 100; |
4 | long | 64位整数 -2^63 至 2^63 -1 8个字节 long money = 100L; |
5 | float | 单精度32位的浮点数(小数) 4个字节 float money = 3.14; |
6 | double | 双精度64 位的浮点数 8个字节 double money = 3.14; |
7 | boolean | 保存布尔值,表示真/假 取值为true和false boolean hasMoney = false; |
8 | char | 保存一个16 位 Unicode 字符 从\u0000 至 \uffff 0-65535 char word = ‘A’; |
- String 字符串
数据类型 | 说明 |
---|---|
String | 字符串类型,保存一串字符,String name = “name”; |
2.类型间转换
基本数据类型之间的转换:大小类型转换、int和char的转换、类型转换注意事。
-
自动类型转换: 类型要兼容)、小数据类型可以自动转为大的数据类型
int numA = 10; double numB = numA;
-
强制类型转换:类型要兼容,大数据类型转化为小数据类型, 转换后精度会丢失:
double numA = 10.5; int numB = (int)numA;
-
int 与 char 之间的转换
char word = ‘A’; int num = word;
int num = 65; char word = (char)num;
6.运算符
1.算术运算符
- +,-,*,/,%, ++, – (++和–在表达式前后的区别)
nt numA = 10;
int numB = 20;
int numC = numA + numB;
//如
int a = 10;
int b = 4;
int c = a/b;
//c得到的是2,因为Java是强类型平台
//要想编变成2.5则可做类型转换
double c = (double)a/b;
//此时a的类型被转换成了double,转换b也可以,但是一般类型转换写在最前面
//numA++;先取出numA的值,再让其参与计算
//++numA;先让numA参与运算再取出运算后的值
int numA = 1;
int numB = numA++;//B=1,A=2
int numC = numA--;//C=2.A=1
int numD = ++numA;//D=2.A=2;
int numE = --numA;//E=1,A=1;
2.关系运算符
- ==、!=、>、>=、<、<=
int numA = 10;
int numB = 20;
boolean result = numA > numB;
System.out.println(result); //输出为:false
3.逻辑运算符
- & , |, ! , &&,||
// 逻辑与:先计算2<1的结果,再计算2<3结果,最后用俩结果进行逻辑与的运算,再把结果保存到变量中
boolean result = 2<1 & 2<3;
// 短路与:先计算2<1的结果,如果结果为假,则不会再计算后面表达式的结果,整个结果为假。实际开发中推荐用 短路与
boolean result = 2<1 && 2<3;
// 逻辑或:先计算2<1的结果,再计算2<3结果,最后用俩结果进行逻辑或的运算,再把结果保存到变量中
boolean result = 2<1 | 2<3;
// 短路或:先计算2<1的结果,如果结果为真,则不会再计算后面表达式的结果,整个结果为真。实际开发中推荐用 短路或
boolean result = 2<1 || 2<3;
// 逻辑非,取反操作,真值变为假,假值变为真
boolean result = !(2>1);
-
逻辑关系表
-
a b a&&b a||b !a true true true true false false true false true true true false false true false false false false false true
4.位运算符(二进制运算)
了解
-
<< ,>> , & ,| ,^ , ~
//右移运算符>> int a = 8;//二进制00001000 int b = a >> 2;//右移,00000010 System.out.println(b);//输出b为2 //左移运算符<< b = a << 2;//左移:00100000 System.out.println(b);//b=32
5.赋值运算符
- =及=与算数运算符(±*/%的结合使用)
int numA = 10;
int numB = numA;
numA = 20;
//连+等运算
int numA = 10;
// 以下两行代码功能等同
numA = numA+ 10;
numA += 10; // 注意连+运算符的书写位置
//其他可自行尝试
6.运算符优先级
7.三目运算符
//5>2若为true则flag为1,若为false则flag为2
int flag = 5>2?1:2;