Java 学习笔记.docx
《Java 学习笔记.docx》由会员分享,可在线阅读,更多相关《Java 学习笔记.docx(54页珍藏版)》请在冰豆网上搜索。
![Java 学习笔记.docx](https://file1.bdocx.com/fileroot1/2022-11/16/d5e2b986-a802-4809-9f97-fb695efd0fa0/d5e2b986-a802-4809-9f97-fb695efd0fa01.gif)
Java学习笔记
Day01;
JVM---Java虚拟机
JRE---Java运行环境
JDK---Java开发包,其中包含JRE
Java的跨平台性
JDK的下载,安装,环境变量的配置
HELLOWORLD第一个程序编写
Classpath环境变量配置,虚拟机先行在环境变量目录下找寻class文件然后才在当前目录下找,也就是说classpath环境变量的优先级大于当前目录。
当配置临时classpath路径时,在路径末加上分号时classpath路径没有对应的class文件,会在当前目录找寻相应的class,反之,若末尾没有分号,则仅在classpath配置路径找寻对应的class文件,不再在当前目录下找寻。
Path环境变量配置时与classpath相反,它会先在当前目录下寻找,然后才找配置的路径。
PS:
我们在配置classpath路径时,以不加分号为好。
如果需要在当前目录下寻找,可以在配置时参照:
classpath=.;c:
\;d:
\前边.代表当前目录。
HelloWorld程序组成部分:
classDemo()//定义一个类
{
publicstaticvoidmain(String[]args)//主函数
{
System.out.println(“HelloWorld”);//输出语句
}
}
class:
关键字,用于专门定义类。
Demo:
类名规范(首字母大写,如果由多个字母组成,每个单词首字母大写)
一般定义有意义的名称,加强易读性。
{}:
一对大括号类区间。
主函数:
publicstaticvoidmain(Stringargs[])保证类能独立运行,程序的入口。
注释:
//------单行注释
/**/------多行注释
/***/------文档注释(开发者使用)javadoc.exe
注解说明程序,调试程序,一边写代码,一边写注释,方便后期维护。
需求分析设计:
需求思路步骤代码
需求:
定义一个HelloWorld小程序;
思路:
(解决问题的思想,可以不涉及代码)
1.
2.
...
步骤:
1.通过class关键字定义一个类,将代码都编写到该类中;
2.为了保证该类的独立运行,在类中定义一个主函数;
3.保存成一个扩展名为JAVA的文件;
4.在DOS控制台中通过javac工具对java文件进行编译;
5.再通过java命令对生成的class文件进行执行。
一个源文件只能有一个public类;被public修饰的类存储源文件时源文件名要与类名保持一致,如果一个源文件出现多个被public修饰的类,源文件不确定存储为什么名字。
Day02;
数据类型:
基本数据类型:
(简单数据类型–语言所内置的类型)
布尔型:
Boolean(true/false)*:
纯粹的java中数值不能给Boolean赋值
字符型:
char16bit–0个符号位,全部都是数值位
charc1=‘a’;//直接指定字面值
charc2=97;//ASCII
charc3=‘\u4e2d’;//i18nnative2ascii
charc4=‘\t’;//转义字符
整数型:
byteshortintlong符号
(1)+数值位(n-1)
8163264
intnum1=25;//10进制赋值DEC
intnum2=025;//8进制赋值OCT
intnum3=0x25;//16进制赋值HEX
intnum4=0b1011;//2进制赋值JDK7.0BIN
*:
十进制二进制的转换
76=64+8+4=01001100
1248163264128256512102420484096819216384…
*:
long定义结束之后可以加L,超出int范围必须加L.
浮点型:
符号位+幂指位+数值位
float
32(1+8+23)F/f
double
64(1+11+52)D/d
67.25=>
得到符号位:
0
整数部分:
64+2+1=1000011
小数部分:
0.01
1000011.01=>科学计数法:
1.00001101*2(6)
0.25*2=0.5;
0.5*2=1.0;
0.0*2=0.0;
幂指位8位:
127+6=01111111+0110=133=10000101
数值位(科学计数法中小数点后面部分):
00001101
01000010100001101000000000000000
*:
IEEE754浮点单精度和双精度的存储规范
*:
计算机当中2.0–1.1等于多少?
为什么?
怎么解决?
引用数据类型:
(自定义类型–自己写的类型Object)
PS:
负数的二进制表现形式:
就是负数的绝对值取反+1,负数的最高位都是1.
字符型和整型相加字符型提升为整型再行相加.
三元运算符,可做简易ifelse语句的简化:
变量=(条件表达式)?
表达式1:
表达式2;
因为是一个运算符,所以运算完必须要有一个结果。
进制转换:
二进制=>十六进制1.最低四位&152.依次>>>4位并&15即可.
二进制=>八进制2.最低三位&72.依次>>>3位并&7即可.
运算符:
1.+-*/%
[+:
]1+1什么情况下不等于2?
当字符串String和数值型进行+号连接时,不是代表数学运算,而是追加连接
[*:
]
数值在进行乘法运算时很容易超出数据边界,发生溢出
*:
int数据类型超过2147483746,后面要加L
*:
商品价格7折优惠
intprice=924;
//price=(int)(price*0.7);
price=price*7/10;
[/:
]
Java当中整数除以整数结果一定为整数
[%:
]
最终结果的符号位取决于参与运算的第一个数字的符号:
5%2=1;
5%-2=1;
-5%2=-1;
-5%-2=-1;
2.+=-=/=%=
[能够自动保持运算符左侧数据类型不发生任何变化]
intnum=3;
num+=1.5;
3.<><=>====
[区别==判断等,=赋值等]
4.&|&&||
[&逻辑非短路运算符][&&逻辑短路运算符]
[当通过前面的条件能够得出最终结论的时候,短路运算符会舍弃之后没有必要的无用功]
5.++--
[++在后,先取值再计算;++在前先计算再取值]
6.&|^~
[按位运算符]
*:
当一个正数%2的n次方数时,将完全等价于&(这个数2的n次方-1)
%2%4%8%16%32%64……
&1&3&7&15&31&63……
*:
数据结构集合存放数据的容器
HashsetHashmap(mustbeapoweroftwo)=>必须是2的n次方
(&分组组数-1)
JoshBlochJava之母
*:
当实现权限控制模块的时候
Unix:
1代表执行权限
2代表写入权限
4代表读取权限
查询某个数中是否有1,2,4….时。
可以用&相应数值来实现
Java修饰符当中:
public=1static=8publicstatic=1+8=9=staticpublic
*:
^按位异或运算符
如何不借助第三块空间交换两个变量的值:
a=a^b;
b=a^b;
a=a^b;
一个数与另一个数异或两次等于它本身
7.<<>>>>>
[位移运算符]
*2*4*8*16
<<1<<2<<3<<4
*:
“>>右移,高位补符号位”右移一位表示除2“>>>无符号右移,高位补0”;
*:
结合按位运算符和位移运算符能够进行简单的图形图像处理
PS:
1st:
如何不借助第三块空间交换两个变量的值
2nd:
计算机如何最高效的求出2的3次方
3rd:
计算144–237之间所有数字累加的和,禁用循环
Day03;
流程控制:
分支:
ifelse[利用其排他特性简化判断条件]
switchcase[注意利用break机制实现相邻分支的代码共享]
*:
while:
先判断条件,只有条件满足才执行循环体。
dowhile:
先执行循环体,再判断条件,条件满足,执行循环体。
break语句:
应用范围:
选择结构和循环结构。
continue语句:
应用于循环结构。
这两个语句离开应用范围,存在是没有意义的。
这个两个语句单独存在下面都不可以有语句,因为执行不到。
continue语句是结束本次循环继续下次循环。
标号的出现,可以让这两个语句作用于指定的范围。
PS:
JDK7.0switch语句支持对字符串的判断。
Day04;
数组:
数组的定义方式:
元素类型[]数组名=new元素类型[元素个数或数组长度];
数组常见操作:
遍历获取最值排序(选择/冒泡)折半查找
编译的时候没有开辟数组空间,只有在运行才开辟.
Day05;
面向对象:
1.三个基本特征:
封装,继承,多态
2.类和对象的关系:
类就是对现实生活中事物的描述;对象就是这类事物实实在在存在的个体。
类是对象的抽象,对象的类的具体。
3.成员变量和局部变量:
成员变量作用于整个类中;局部变量变量作用于函数中,或者语句中。
成员变量:
存在堆内存中,因为对象的存在,才在内存中存在;局部变量:
存在栈内存中。
如果局部变量的名字和成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。
这时如果想在该方法内使用成员变量,必须使用关键字this。
4.匿名对象使用:
方式一:
当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。
方式二:
可以将匿名对象作为实际参数进行传递。
PS:
如果对一个对象进行多个成员调用,必须给这个对象起个名字,即不再使用匿名对象。
5.封装概述:
Encapsulation
用private将不想被外界访问的属性和方法隐藏起来,private私有成员只有在本类中可以使用;
封装对于类的开发者和使用者都有好处:
对于类的开发者:
能够让数据得到保密得到隐藏从而更加安全
对于类的使用者:
能够让使用者将精力全部集中在核心业务逻辑上
类的开发应当高内聚低耦合
内聚:
独立完成功能的能力
耦合:
模块与模块之间的依赖关系,"耦合"无处不在
所有的属性应当使用private修饰
并且提供两个public的方法sette