#Java语言的特点
---面向对象、强类型、垃圾自动回收
---强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。
(相关资料图)
---而弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过现行强制转换。
#面向对象
---面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。特点:封装、继承和多态(本质是为了节省代码量)
#垃圾自动回收
---自动垃圾回收是针对堆区内存中的对象,分辨哪些对象是正在使用中而哪些对象没有,然后删除那些没用的对象。
---一个正在使用中的对象或者是一个被引用的对象,意味着你的程序中的某部分仍然维护着指向这个对象的指针。
---一个无用的对象或者是一个无引用的对象,是说它已经不再被你的程序中任何一个模块所引用。所以被一个无用对象所占用的内存是可以被回收的。
#编译型语言:
---编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件,比如exe。因为翻译只做一遍,以后都不需要翻译,所以执行效率高。
---编译型语言的典型代表:C语言,C++。
---编译型语言的优缺点:执行效率高,缺点是跨平台能力弱,不便调试。
#解释型语言:
---解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。执行时才翻译执行。程序每执行一次就要翻译一遍。
---代表语言:python,Java。
---优缺点:跨平台能力强,易于调,执行速度慢。
#跨平台
---注意:类要和文件名一样(这里类名Demo,文件名Demo.java)
---notepad++创建(我的是UTF-8编码)
---编译:javac Demo.java
---发现生成了Demo.class文件
---运行:java Demo
---流程:Demo.java > Demo.class > Win/Linux/Mac版 jvm虚拟机 > Win/Linux/Mac
---Demo.class不需要修改代码就可以在Win/Linux/Mac系统运行,靠的是JVM虚拟机屏蔽了底层运行平台的差别,实现“一次编译,到处运行”。
#Java语言的注意事项:
---驼峰命名法:当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母
---注意:区分类名首字母大写,而且公有类和源文件命名相同
#Java语言的基础组成
#Java的编码
---CMD的窗口默认的编码是GBK编码
---例如:在Demo.java中加入中文的注释
---然后用CMD打开发现乱码
---这里的原因是:CMD的编码是GBK,而Java的编码是UTF-8
#常见的编码方式
---在滴水逆向里面有详细描述,这里就简略描述下(想看详细说明,可以看我的专栏:【滴水基础】4.Win32Api调用(上))
---UTF-16和UTF-8的对于区间:
#CMD设置默认编码UTF-8
---不建议将系统改为UTF-8,这里只需要将CMD改为UTF-8就行
---chcp 65001
---发现编码更改
---而且也可以正确显示
---但是不能永久生效(需要修改注册表)
---Win+R > regedit打开注册表:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
---新建字符串/值
#IDEA的配置(安装可以CSDN+某宝)
---IDEA中新建的项目(我直接默认的)
---IDEA的配置文件:C:\Users\huangbo\AppData\Roaming\JetBrains
---删除配置文件,即idea的字体设置啊这些就失效了
#转义字符\
---在ASCII中有一些不可见的字符,如果想要表示这些不可见的字符,就需要转义字符
---如果本身就要输出1个\,就需要\\,不然就会报错
---转义字符\的作用:1.解决不能显示的字符2.防止重复和冲突
---执行结果如下
#变量
---变量就是在内存中的一块存储区域,声明定义了一个变量就是在内存中开辟了一块空间
---变量被开辟就要明确存放数据的类型(数据类型)和将来被调用的名字(变量名)
---分为局部变量(缓冲区)和全局变量(堆内存)
---声明的变量一般在缓冲区存储为(32位)0xCCCC CCCC(查看反汇编)
#Java的数据类型
---注意:Java的原始类型int里没有无符号类型,c语言int类型表示有符号整型,unsigned int无符号整型(所有Java里面的int 是有符号数: 00000000 00000000 00000000 00000000,首位0代表符号位)
---C语言中的char是1Byte,估计是参考了ASCII码,字符占位1Byte
---而Java中的char是以Unicode编码中的UTF-8存储,一个字符占2Byte(通用情况下)
---float与int一样都占了四个字节也就是32个比特位,但是存储的含义与int不一样了。其中第一位代表正负,第2-9这八位代表指数,与后23位的底数。
---符号位(1bit):0位正数,1位负数。---指数位(8bit):用于记录科学计数法中指数数据(具体可以看滴水专栏)由于指数位全为1的时候有特殊用途,所以指数位真正的取值范围是-127-127。---尾数位(底数位)(23bit):记录科学计数法中的底数部分。
---double的存储方式和float类似,只是内存扩大了1倍
#有符号数的存储方式(在解析前,先判断正数/负数):
---正数:以原码方式存储
---负数:以补码方式存储
---例如:-1的原码: 1 000 0001;反码:1 111 1110;补码:1111 1111(FF)
#为什么byte的取值范围是-128到127
---byte 占一个字节(8个 bit 位),最高位是符号位,尾七位可以表示的就是 0 ~ 2^7 - 1( 1000 0000 = 2 ^ 7,减1,得到 111 1111),所以 byte 可以表示 -127 ~ 127
---[1000 0000]补 表示 -128,-128只有补码,没有原码和反码
---我认为[1000 0000]补 = [0111 1111]反 = [0000 0000]原 = 0;
---已经有[0000 0000]原 表示 0 了,不需要[1000 0000]补 表示 0 了,所以[1000 0000]补 表示 -128
#整数型
---出现在代码中的整数,默认为int,声明long或者运算的时候需要加L
#浮点型
---出现在代码中的小数,默认为double,声明float变量需要在后面加F
---小的数据类型可以放入大的数据类型里面
----科学计数法:相当于10^n次方
---输出(这个是double类型):
---小数精度问题:
----由于小数存储的方式和整数不一样,分为:符号位/指数位/尾数位,所有小数的运算可能会造成精确度的问题
---这里发现输出存在精度问题
#字符型
---char本质是一个整数,输出的是Unicode对应的字符
---如果非要输出整数,需要进行强制转换
---Java中‘’代表字符,“”代表字符串
---发现:字符型可以强制转型为对应的Unicode编码的字符串
---字符型的存储(注意:字符型是一种特殊的基本数据类型)
---存储:a > Unicode对应的编码97(正数) > 二进制:01100001 >原码存储
---读取:二进制 > 97 > a
---char类型可以进行的运算(因为char的本质是一个整数)
---输出发现
#布尔型和类型转换
---占1Byte,取值为TRUE或者FALSE(注意:在Java中不能使用0或者非零来代替flase和true)
---自动类型转换:Java在进行赋值或者运算的时候,精度小的类型可以自动转化为精度大的类型
---注意事项(强行转换则不用考虑这些)
---在运算的时候,自动的转换为精度最高的类型
---这里报错的原因:byte/short/char在进行计算的时候,自动转为了int
---前提是:在运算的过程中,没有高于int的类型(如出现float,就转化为精确度最高的类型)
---测试案例:
---在运算的时候,整型一般转化为int,浮点型转化为double
---其它了些自动转换案例
---发现了字符串进行了串联
---注意:当存在数值运算和字符串连接的时候:
---根据运算的从左到右的顺序,来判断是先计算还是先连接(先连接就不用计算了)
---输出如下:3001=(100+200)1=3001;
---1100200=1+100+200
#强制类型转换
---当类型不一致且不符合自动类型转换的标准,就可以使用强制转换(优先级高)
---类型转换不仅仅在基本数据类型,引用数据类型也可以转换
---进行强制转换可能会造成精度丢失(可以从二进制的角度分析)
---输出
#关键字和保留字
---标识符命名的时候不能使用关键字,关键字一律用小写字母标识,按其用途划分为如下几组。
---另外,Java还有3个保留字:goto、const、null。它们不是关键字,而是文字。包含Java定义的值。
---和关键字一样,在IDEA里面也是会变色的,它们也不可以作为标识符使用。
#标识符
---标识符为名字,用来区分不同的类、方法、变量等---标识符规则:不可以以数字开头,大写字母和小写字母以及下划线和$符号---注意事项和规范:
---案例
#常量
---注意:System.out.println()输出的是十进制
#算术运算符
---运算符是一种特殊的符号,表示数据的运算/赋值/比较等
---单元运算符
--:+作为单元运算符的时候,表示正负
---二元运算符
---+作为二元运算存在,左右没有字符串的时候,进行数值处理;而存在字符串的时候,进行字符串拼接
---输出:
---四则运算符:+ - * /
---注意:对于四则运算要特别的考虑数据类型(可能会照成精度缺失)
---例如:12/5输出的2,这是由于12和5都是int类型
---解决方法:将12转换为double
---这里输出:4000,原因是x/1000都是Int,所以等于4,4*1000=4000
---取余运算符%(从整数考虑:a%b=a-a/b*b)
---自增和自减
---作为独立的语句使用:前++和后++都完全等价于i=i+1
---前++:先自增,后赋值
---后++:先赋值,后自增
---i=i++;的本质
---i=++i;的本质
---对于()的运算,可以看成A B C三个部分
#运算符的练习
---43天等于多少星期多少天
---4725秒等于多少时多少分,多少秒(输出1小时18分钟45秒)
【安卓逆向】1.Java开发(1)_世界速讯
天天速讯:Informatica(INFA.US)获Guggenheim首次覆盖,给予买入评级
环球速读:聊惠保客服电话_多聊免费电话
220期-每天记5单词
机构贺新春丨启明创投梁颕宇:坚持不懈地在助力创业者的航道上奋勇向前
幸福村里话幸福(新春走基层·乡村振兴一线见闻)-世界要闻
热消息:(新春新气象 开好局起好步)吉林:念好“新”字诀 着力加快创新驱动发展
2022年检察机关加大司法救助力度共救助8.2万人8.4亿元
妹妹结婚发朋友圈句子_结婚经典祝福语
岚图FREE挪威首批交付已开启,原来国产高端电动车也能获海外认可_全球观速讯
【防弹少年团BTS/田柾国】当你在诊所里遇到了crush|新消息
全球快看:多媒体技术发展的基础是_多媒体技术概念
银保监会出台银行保险监管统计管理办法-最资讯
每日播报!野鸭恋家乡 越冬在辽河
天天实时:妃夕妍雪公主结局_妃夕妍雪轻飏最后结局?
身上汗臭味重怎么办_5个小方法要知道
上海老凤祥铂金多少钱一克(2023年01月22日)参考价格
@港澳台青年 “最美太空教师”王亚平发来新春祝福-要闻
千里通途联结大家小家
FTX创始人班克曼-弗里德被美国检察机关扣押近7亿美元资产 全球快播报
直击医保药品灵魂砍价现场详细内容-世界实时
今日天下通国内机票 今日天下通国内机票_环球今头条
什么样的拥抱姿势会让你感到兴奋?
焦点日报:2023苏州春节烧头香好去处
牛皮革怎么保养_漆皮应该怎么保养?
区民防办开展民防工程安全大检查工作
快讯:多地出台2023年水泥错峰生产计划
民建商丘市委会开展春节慰问活动_通讯
药明康德: 股东减持股份结果暨权益变动比例超过1%的提示性公告
双桥办事处春节期间走访葛寨农贸市场:世界新消息