1.关键字(单词在java中有特殊含义 所有的字母都是小写)
分为以下几类{
①定义:定义数据类型关键字
定义数据类型值关键字
定义程序的流程控制关键字
定义创建实例的关键字
定义包名
②修饰符:访问权限 以及类 函数 变量
③异常:异常处理关键字
④定义类之间关系的关键字
⑤其他修饰符关键字
}
例如final 关键字:https://blog.csdn.net/qq_34375473/article/details/81487803
还可以修饰形式参数 :修饰参数后不能被修改;
声明只读变量 static final 常量: 命名规范(全大写_下换线隔开)
2.标识符(自己命名的)
规则为:(主要是:见名知意)
26个英文字母大小写 0,9 以及_ $
不能数字开头
不能直接使用关键字和保留字
不能包含空格
规范:
包名:aaabbbbccc
类名 接口名:AaaaBbbb
方法名:aaaaBbbbbZzzz
常量名 AAAA_BBBB
3.变量:
3.1(占内存的存储空间+组成:数据类型 :变量名+声明后使用)
作用范围:在一对{}中有效
格式:数据类型 变量名 =初始化值
使用变量名进行访问内存中存储的变量
但是 string 和包装类:是按值传递。
包装类型:
https://www.cnblogs.com/lyq-biu/p/10778109.html
3.2变量转化:{
①自动转化
所占内存位数小的转化成容量位数占的大的
注意点:
第一。long 8字节 但可以自动转化成float 4字节
他们用科学计数法的方式不一样(底层存储结构不一样)。
long: 2^63-1
float: 3.4*10^38 > 2*8^38 = 2*2^3^38=2*2^114 > 2^63-1
所以3.4*10^38 > 2^62-1
原因:https://blog.csdn.net/shanshan1yi/article/details/48477119
第二。char 编码方式是ascii码 a 对应十进制数为97 A:65
第三。char(// 只能表示一个英文字符 可以是一个汉字 标点=符号 日文等 转义字符 2字节) short (2字节) byte (1字节) 但是两两(或者是和自身)进行运算 都自动转化默认的是 int
②强制转化 损失精度 留下后面低位的 丢失高位
}
3.3 string 引用数据类型的使用
运算只能是 (+) 连接运算 只能结果还是string类型
3.4在内存中的二进制存储结构:
byte 是 1个字节 占8位 范围 :2的8次方 256种组成
对于正数和负数 在计算机中的存储格式:
正数 (原码 反码 补码都一致) 负数是用补码的形式来存储的 (负数的反码=正数的二进制式子 除去第一位符号位外 全部取反 ) (负数补码=负数反码+1)
3.5变量的运算:
①算术运算符:
(注意点:
对于整型数a,b来说,取模运算或者求余运算的方法都是:
1.求 整数商: c = a/b;
2.计算模或者余数: r = a - c*b.
求模运算和求余运算在第一步不同:
取余运算在取c的值时,向0 方向舍入(fix()函数);
取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。
例如计算:-7 Mod 4
那么:a = -7;b = 4;
第一步:求整数商c,如进行求模运算c = -2(向负无穷方向舍入),求余c = -1(向0方向舍入);
第二步:计算模和余数的公式相同,但因c的值不同,求模时r = 1,求余时r = -3。
归纳:当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。
当符号不一致时,结果不一样。求模运算结果的符号和b一致,求余运算结果的符号和a一致。
另外各个环境下%运算符的含义不同,比如c/c++,java 为取余,而python则为取模。
java中//取模 也就是求余数 结果的符号取决于 被模数 也就是前面的那个数的符号
)
②赋值运算符:
s+=1;//这样不会改变s的类型 这样既可以实现运算 也不会改变s的数据类型
③逻辑运算符:(用于boolean 类型的运算)
&区别&&
&:不管一开始进行判断的项是true或者false 后者都会进行运算
&&:左端判断的项是false时 右端不会在进行判断
|区别|| :
同上
^逻辑异或运算 相同为false 不同为true
④位运算符:(用于数值型运算): << >> & | ~ ^
& 按位与
| 按位或:
|
可写算式如下:
1 2 3 4 |
|
(十进制为13)可见9|5=13
^ 按位异或 :按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
~取反:
1 |
|
结果为:
1 |
|
<<左移: 左移运算符“<<”是双目运算符。左移n位就是乘以2的n次方。 其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。移位是有限制的
>>右移: 同理可得
就是对于二进制进行运算
Continue::直接跳出本次循环,再执行下一次循环。
⑤三元运算符:
例子:abc中最大值:(a>b)?((a>c)?a:((b>c)?b:c) ):((b>c)?b:((c>a)?c:a))
4.程序代码的流程控制
5.数组:https://blog.csdn.net/Taylor_Ocean/article/details/82347707
6.方法中的可变参数 例如:String... args
数据类型:一组性质相同的值的集合以及在这个集合上的一组操作。
对于数据类型的使用约束程度划分:强类型语言和弱类型语言:
强类型语言:实现必须声明变量类型。例如 java中 int i;
弱类型语言:声明一个变量时可以不指定其类型。例如:javascrip :var i;
静态和动态:
静态:静态变量(static 修饰符)-------相反----实例变量属于某一个实例的对象的。
7.封装、继承、多态、实现:
单继承(类之间父子继承、接口可以多继承多实现)、类也可多实现(功能)
多态(继承后)向上转型,实例引用的是子类的对象,但丢失子类的特有属性和方法,不能再访问子类中添加的属性和方法。
因为:虽然引用的对象中有有关的成员,但是编译过程中编译器总是根据变量声明的类型进行检查,所以在检查中父类类型的变量认为没有子类的属性和方法。造型(只有向上转型后的才能再向下转型):
Person p=new Student(); Sutdent s=(Student)p;
抽象类:不用实现细节,只需要不具体的抽象方法(抽象方法必须在抽象类中),为了子类继承抽象类,扩写实现没有实现的方法。子类必须实“实现”重写父类抽象的所有方法(若不全部重写,则子类也必须是抽象的)。为了代码的重用、编程规划。
同类下:重载(方法同名不同参数或者不同参数类型)
https://blog.csdn.net/wintershii/article/details/80558739
8.JAVA的实例块和静态块
静态块比变量初始化在前,但静态块是类加载的时候和静态属性一起执行的
https://blog.csdn.net/qq_40550973/article/details/80549453
匿名对象和有名对象:
new Test().show( new Person()); // 只能一次使用,以后无法访问到,因为栈中没有存堆内存的对象的地址,所以随后就被回收系统收回。
匿名类:
接口、抽象类无法实例化:方法可以创建一个类来继承抽象类,但是也可以匿名内部类(系统自己创建生成销毁)
例如 Person p =new Person(){
@override
public void xxx(){}//重写方法
}
9.异常处理
error: jvm虚拟机内部错误、系统资源耗尽严重情况
exception:其他因编程错误或者偶然因素导致:空指针(创建的引用类型的对象,指向为空)
执行return,但先检查是否有finally,限制性finally在执行return(交还执行权)
10.String、stringBuffer、stringBuilder
string:创建对象之后,内容不可修改,可以重新创建对象覆盖原内存空间
stringBuffer:可变字符串处理类,对象创建后,也可长度和内容进行修改,每个创建的对象拥有一个可变容量的字符串缓冲区,多线程安全,每个方法有synchronized修饰:同步锁,
stringbuilder:可变字符串处理类,多线程的没有同步性,不安全
11.时间类
https://blog.csdn.net/ydxzmhy/article/details/51730403
增强体for循环:不安全,for (Student student : collection) { } 此处的collection在每一次执行后,都会有变换,
13.存储对象的方法:数组、集合
数组:初始化固定长度,无法变化
集合:(封装数组,底层实现使用数组):可以各种类型对象
hashcode:迭代思想(质数31不能被其他数除,再乘以质数迭代很大程度上保证了hash值不同)
14io流
java.io.file类 ---------------------------->>io流(涉及到文件对象中的内容的操作)
文件和目录路径名的抽象表示。将文件看成一个抽象类,一个文件就对应着创建的一个实例化对象
io流:用于设备之间的数据传输(流stream)输入<-------------------->输出 等价于 内存<------------------->外存
https://blog.csdn.net/weixin_34278190/article/details/85832244
15.main方法执行问题:
15.线程{进程、创建方式、线程生命周期、同步(安全)、通信}
问题:
1.为什么创建线程后重写run()方法,调用start()方法
https://blog.csdn.net/qq_40108025/article/details/95357484
https://blog.csdn.net/weixin_42956047/article/details/96432970
https://www.cnblogs.com/marsitman/p/11183177.html
Treadgroup线程组,main主线程
threadgroup的解读: