前两章理论知识详细总结
1. class 和 public class的区别?
- 一个Java 源文件中 class 可以定义多个、但是只能定义一个public class(非必须)
- 如果定义了 public class 那么必须和源文件的名字相同
- 一个class会定义成一个 xxx.class 字节码文件
package bilili;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello,world!");
}
}
// public表示公开的
//class 表示一个类
//hello world表示一个类名
2.什么是标识符?
数字字母下划线还有美元符号$
自己有权力命名的单词都是标志符
严格区分大小写
关键字不能做标识符
(1)它可以做什么?
*类名、方法名、变量名、接口名、常量名
#类名、接口名:首字母大写,后边每个单词首字母大写
#变量名 、方法名:首字母小写,后面每个单词首字母大写
#常量名:全部大写
(2)eg:public static void main(string [] args){}
//main是方法名 arg是变量名
3.关键字练习
Java 中的关键字
访问控制: private protected public
类、方法和变量的修饰符:abstract class extends final implements interface native new strictfp synchronized transient volatile
程序控制:break continue return do while if else for switch case default
错误处理:try catch throw throws
包相关:import package
基本类型:boolean byte char double float int long short true false
变量引用:super this void
保留字:goto const
4.字面值: (字标面的大小)
-10、100 属于整数型字面值
-“abc” 属于字符串型字面值
-‘a’、‘人’ 属于字符型字面值
-3.14 属于浮点型字面值
-true flase 属于布尔型字面值
*字面值就是数据
package bilili;
public class VarTest01 {
static int k = 1254; //k 在类体里边 static不能去
public static void main(String[] args) {
int i = 100; //局部变量
System.out.println(i);
i = 200; //重新赋值 如果去掉这个 i 输出的就是下边那个i;
System.out.print(i);
}
int i = 188; //成员变量
public static void doSome() {
System.out.println(k); //可以访问 k;
}
}
5.变量
(1)什么是变量?
*本质上是内存中的一个存储空间
*变量包含:“数据类型”、“有名称”、“有字面值”
*变量是内存中最基本的内存单元
(2)数据类型的作用?
*不同的数据有不同的类型,他们会分配不同的空间大小
(3)变量要求:变量中存储的具体 数据 必须和变量的 数据类型一致
(4) int i; //int 数据类型 i 变量名(合法标识符)
int age; //命名规则:首字母小写后边每个单词首字母大写
(5)变量名 = 字面值; 要求字面值的数据类型必须和变量的数据类型一致
// = 是运算符
(6) 通常访问一个变量包括两种访问形式
- 读取变量中保存的数据 get/获取
- 修改变量中保存的数据 set/设置
i = 20; //set
System.out.println(i); //get
(7)在方法体中的java代码,是遵守自上而下的顺序依次执行
第一行;
第二行;
第三行;
//第二行不执行完第三行是永远不会执行
(8) int i = 200;
System.out.println(i);
int i = 100; //错误
i = 100; //可以 这个i是重新赋值
(9)变量的作用域
*变量的作用域其实就是变量的有效范围。
值有在有效范围内能够使用 (出了大括号就不能用了)
(10) for(int i = 0;i<10;i++){
}
System.out.println(i) //错误无法访问 i变量
//i 的作用域是整个for循环 for循环结束了 i就被释放了
int j;
for(j = 0;j<10;j++){
}
System.out.print(j); //可以直接访问
(11) 根据变量声明的位置来分类:
* 局部变量: 在方法体中声明的叫做局部变量
* 全局(成员)变量: 在方法体外(类体之内)声明的变量叫做成员变量
6.基本数据类型
第一类:整数型
Int long short byte
第二类:浮点型
Float double
第三类:布尔型
Boolean
第四类:字符型
Char
(2). 字符串”acb”不属于基本数据类型,属于“引用数据类型”,字符属于基本数据类型
*字符串使用双引号”abc”
*字符使用单引号 ‘a’
(3)八种基本数据类型各自占用的空间大小:
(4).现在的计算机在任何情况下只识别二进制:010111010001.
计算机底层采用交流电的方式:接通和断开就是两种状态 只识别0 1
(5) 字节(Byte )
1 Byte = 8 bit (一个字节等于八个比特位,一个比特位表示一个二进制位:1/0)
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024MB
1 TB = 1024 GB 1 TB = 10241024102410248(二进制位)
(6)byte类型的最大值:01111111 (2^7-1)=127 最小值: -128
(7)计算机最初只支持英文,最先出现的字符编码是:ASCLL码
‘a’-------65(解码)----01100001
01100001—(编码)----’a’
编码和解码的时候采用同一套字典/对照表,不会出现乱码。
(8)java 采用 Unicode 的编码,所以标识符可以用中文
(9)关于Java中的char类型:
转义字符: \
package bilili;
/*
* 关于八种基本数据类型的默认值
* 数据类型 默认值
*————————————————————————————————
*byte,short,long,int 0
*double 0.0d
*float 0.0f
*boolean /u000
*/
public class MorRenZhi {
static int k= 100; //成员变量
static int m;
//成员变量没有手动赋值系统会默认赋值(局部变量不会)
//这里还是必须遵守语法:先声明 再赋值才能访问
public static void main(String[] args) {
/*int i; //局部变量
System.out.println(i);
*/
System.out.println(k); //100
System.out.println(m); //0
char c = 'a';
System.out.println(c);
char m = '梅';
System.out.println(m);
//一个中文正好占用两个字节所以可以输出
//几种错误 char a='abc' char j = "a"
}
}
整数型实例
package bilili;
/*
* java中的整数型:byte short int long
* java中的整数型字面值的有三种表示方法
* 十进制:是默认方法
* 八进制:编写是以0开始
* 十六进制: 0x
* 输出都是以十进制输出
*/
public class ZhengShuXing {
public static void main(String[] args) {
int a = 10;
int b = 010;
int c = 0x10;
System.out.println(a);
System.out.println(b);
System.out.println(c);
long x = 456; //x型变量在声明的时候是long类型,占用8个字节
//int类型的字面值456赋值给1ong类型,存在类型转化
//小容量向大容量类型转化称为自动类型转化
System.out.println(x);
//long z = 1234567890111; 程序会出错 程序中纯输入数据会直接被当成int类型
long z = 1234567890111L;
System.out.println(z);
}
}
package bilili;
public class ZhengShuXing2 {
public static void main(String[] args) {
byte b = 50; //无法编译成功 50是int类型的字面值 b是byte类型的变量
//显然是大容量转换成小容量 但是50
byte c = 127; //可以
//byte d = 128; // byte取值范围 -128~127
System.out.println(b);
long l = 123456789L;
//int x = l; 编译报错:大容量不能直接赋值个小容量
int x = (int)l;//强制类型转化需要加强制类型转换符,但可能损失精度
System.out.println(l);
System.out.println(x);
}
}
55
//算数运算符
package bilili;
/*
* java中的基本算数运算符
* + - * / % ++ --
*/
public class SuanShuYunSuanFu {
public static void main(String[] args) {
int i =10;
int j = 3;
System.out.println(i + j); //13
System.out.println(i - j);// 7
System.out.println(i * j); //30
System.out.println(i % j); //1
//关于 ++ (自加1)
int k = 10;
k++;
System.out.println(k); //11
int y = 9;
++y;
System.out.println(y); //10
//++在变量之后
int a = 100;
int b = a++; // 相当于b = a; a++
System.out.println(a); //101
System.out.println(b); //100先进行赋值运算 然后再运算
//++在变量之前
int m =32;
int n = ++m; // ++m ;n =m
System.out.println(m); // 33
System.out.println(n); //33 先进行运算再赋值
int e = 1000;
System.out.println(e++); //1000
System.out.println(e); //1001
}
}
//关系运算符
package bilili;
/*
* 关系运算符:> < >= <= == !=
*/
public class GuanXiYunSuanFu {
public static void main(String[] args) {
int a= 10;
int b = 9;
//运算原理 比较的是a变量中保存的这个值和b变量中保存的值
System.out.println(a > b); //true
System.out.println(a >= b); //true
System.out.println(a < b); //
System.out.println(a <= b); //false
System.out.println(a == b); //f
System.out.println(a != b); //t
}
}
//逻辑运算符 (位运算符)
package bilili;
/*
* 逻辑运算符:
* & 逻辑与
* | 逻辑或
* ! 逻辑非
* ^ 逻辑异或 (两边的算子只要不一样,结果就是true)
*
* && 短路与(于逻辑与运算结果一样)
* || 短路或
* 1.逻辑运算要求两边的算子都是布尔类型(true\false),并且逻辑运算完也是布尔类型
* 2.什么情况短路运算?
* 3.什么时候选择逻辑与运算符?什么时候选择短路与运算?
*/
public class LuoJiYunSuanFu {
public static void main(String[] args) {
System.out.println(5>3 & 5>2); //t
System.out.println(5>3 & 5>6); //f
System.out.println(5>3 & !(5>6)); //t
System.out.println(5>3 ^ 5>6); //t
//逻辑与和短路与
/*
int x = 10;
int y = 12;
System.out.println(x < y & ++x < y); //true
System.out.println(x); //11
*/
int x = 10;
int y = 8;
System.out.println(x < y && ++x < y); //false
// x<y 是false 整个表达式结果已经确定是false 所以后边的表达式不会被执行,这种现象称为短路现象
System.out.println(x); //10
/*什么情况会发生短路或?
* 第一个表达式执行完式true,会发生短路或。
*什么情况下发生短路与?
* 第一个表达式执行完情况是false。
*/
}
}
算数运算符
package bilili;
/*
* java中的基本算数运算符
* + - * / % ++ --
*/
public class SuanShuYunSuanFu {
public static void main(String[] args) {
int i =10;
int j = 3;
System.out.println(i + j); //13
System.out.println(i - j);// 7
System.out.println(i * j); //30
System.out.println(i % j); //1
//关于 ++ (自加1)
int k = 10;
k++;
System.out.println(k); //11
int y = 9;
++y;
System.out.println(y); //10
//++在变量之后
int a = 100;
int b = a++; // 相当于b = a; a++
System.out.println(a); //101
System.out.println(b); //100先进行赋值运算 然后再运算
//++在变量之前
int m =32;
int n = ++m; // ++m ;n =m
System.out.println(m); // 33
System.out.println(n); //33 先进行运算再赋值
int e = 1000;
System.out.println(e++); //1000
System.out.println(e); //1001
}
}
赋值运算符
package bilili;
/*
* 基本赋值运算符: =
* 扩展运算符: -=、 +=、*=、/=、%=
*/
public class FuZhiYunSuanFu {
public static void main(String[] args) {
int i = 10;
System.out.println(i);
i += 11; //i = i + 5;
System.out.println(i); //21
byte b = 10;
//b=b+5; 编译错误,编译器只检查语法不运行程序,编译器发现b+5是int类型,b是byte类型的,da'rong'q
//b+=5; 可以
b = (byte)(b+5);
System.out.println(b);
int a = 10;
int c = 20;
System.out.println("a+c="+a+c); //1020
System.out.println("a+c="+(a+c)); //30
}
}
三元运算符
package bilili;
/*
* 三元运算符/三目运算符/条件运算符
* 1.语法规则:
* 布尔表达式 ? 表达式1 :表达式2
* 2.三元运算符的执行原理?
* 当布尔表达式的结果为真(true)的时候, 选择表达式1为表达式的执行结果
* 当布尔表达式的结果为假(false)的时候,选择表达式2为表达式的执行结果
*/
public class SanYuanYunSuanFu {
public static void main(String[] args) {
boolean sex = false;
char c = sex ? '男':'女';
System.out.println(c); //女
sex = true;
String s =sex? "man":"woamn";
System.out.println(s); //男
}
}