JavaSE基础语法知识点(C语言快速转Java)
1、Java程序基础1.1 JDK和JRD
JDK=JRE+Java开发工具;
JRD=JVM+Java核心类库; 1.2 命令行操作
cd md创建文件目录;
cd rd删除;
cd del删文件;
cd ..返回上一级;
cd /跳转目录; 1.3 pubilic+class
类名-->与文件名一致; 1.4 字节码文件
编译后生成字节码文件(.class)有几个类生成几个; 2、标识符2.1 标识符的组成
数字、字母、下划线、美元符号(可以是中文),
与C语言相同首字符不能以数字开头;
与C语言相比,标识符的组成多了一个美元符号; 2.2 遵守驼峰命名方式
e.g. SytemService、UserService; 2.3 类名、接口名:
首字母大写,后面每个单词首字母大写; 2.4 变量名、方法名:
首字母小写,后面每个单词首字母大写; 2.5 常量名:
全部大写;
//与C语言的常量不同 字面值(数据)看见字知其数据;
e.g.10.100,3.14,"abc","a",ture、false(布尔型); 3、关键字
关键字要小写
public、class、static、void...... 4、变量与常量4.1 变量
Java中变量必须声明再赋值才能访问(否则内存未开辟出来);
变量必须初始化; 4.2 常量
常量有final关键字修饰; 5、boolean类型5.1 布尔类型的值
boolean类型只有ture false 没有其他值; 5.2 布尔类型占用的字节数
boolen类型只占用1个字节; 5.3 布尔类型的底层表示和定义
不像C语言有0、1表示假和真;
底层false为0,ture为1;
定义:boolean i = true; 6、byte类型
byte类型表示8位带符号的二进制数; 7、char类型7.1 char类型占有字节数
char类型在java中占2个字节; 7.2 char类型与short类型
char和short可表示的种类数量相同,但char可取更大的正整数; 8、float类型与double类型
java中无float类型,定义float类型时,在浮点数后+f;
否则认为是double类型,编译失败; 9、类型转换
1、布尔类型无法强制转换;
2、Java:高精度赋值给低精度时需要强制转换,否则编译错误,显示不兼容的类型,高精度到低精度会造成损失精度;e.g.long-->int
3、C语言:高精度赋值给低精度时,会有精度缺失,但不会造成编译失败;
4、Java和C语言:低精度赋值给高精度(小容量-->大容量) 自动转换,不存在精度损失;e.g. int-->long
5、当整数字面值未超过byte、short、char的取值范围可以直接赋值给byte、short、char;
6、byte、short、char混合运算时,先各自转换成int;
编译报错,因为(b+5自动转换成了int类型,所以要想通过编译,需要加强制转换)
7、多种数据类型混合运算时,先转换成容量最大的类型;
8、long类型在后面+"L",long 10L,L用来判断是否为long类型;
9、float表示离散、有限、舍入误差、大约、接近不等于、0.1!=0.1,c=c+1;
需要完全避免用浮点数比较大小;
10、
输出为-127(因为有溢出);
11、JDK新特性
数字之间可以用下划线分隔,更清楚分辨位数;
e.g.10_0000_0000 10、类的定义10.1 语法结构
[修饰符列表] class 类名{undefined
}
String不属于基本数据类型,是一个字符串类型,也是一个引用类型;
引用数据类型还包括:类,接口,数组;
String是SUN在JavaSE中提供的字符串类型;
String.class字节码文件;
重点:
1、属性通常是采用一个变量的形式来完成定义的;
2、在类体当中,方法体之外定义的变量被称为"成员变量",成员变量没有赋值,系统赋默认值:一切向0看齐; 10.2 基本数据类型
byte、short、int、long、float、double、boolean、char; 10.3 引用数据类型
String.class SUN提供的;
System.class SUN提供的;
Student.class 程序员自定义的(是一个类,类型,引用数据类型); 11、逻辑运算符(布尔运算符)
& 逻辑与
| 逻辑或
!逻辑非(取反)
^ 逻辑异或(两边的算子只要不一样,结果就是ture)
&& 短路与
|| 短路或
1、逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型;
2、"短路与(或)"和"逻辑与(或)"最终的结果相同,只不过"短路与(或)"存在短路现象 11.1 逻辑与&
&左边无论是true还是flase都会计算右边;
运行结果为11 11.2 短路与&&
&&左边若为false则直接短路,右边不再计算(短路现象);
运行结果为10
从某个角度来看,短路与更智能,效率更高; 12、运算符12.1 赋值运算符
+=、-=、*=、/=、%=;
byte、short、char混合运算时,先各自转换成int;
编译报错,(b+5自动转换成了int类型,所以要想通过编译,需要加强制转换或者使用b+=5)
以上述例子为例
b+=5和b=b+5并不等同;
b+=5与b=(byte)(b+5)是等同的;
结论:
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是byte类型,无论怎么进行追加或追减,最终该变量的数据类型还是byte类型,但有可能会损失; 12.2 字符串连接运算符
关于java中"+"运算符:
1、+运算符在java语言当中有两个作用:
*加法运算,求和;
*字符串的连接运算;
2、"+"两边的数据都是数字的话一定是加法运算;
3、"+"两边的数据只要有一个数据是字符串,一定会进行字符串的连接运算,连接运算之后的结果还是一个字符串类型;
静态输出
e.g.System.out.println(10+20);//30
System.out.println(10+20+"30");//"3030"
System.out.println(10+(20+"30");//"102030"
System.out.println("10+20="+a+b);
"10+20="是字符串;
"10+20="+a先运算字符串+a等于个字符串"10+20=10";
"10+20="+a+b再运算+b等于个字符串"10+20=1020";
System.out.println("10+20="+(a+b));
此时先运算(a+b)=30,在进行字符串"10+20="+30="10+20=30";
动态输出
System.out.println(a+"+"+b+"="+(a+b)); 12.3 三元运算符/三目运算符/条件运算符
e.g.1
10,"男"不是一个完整的java语句;
编译会报错;
修改如下:
e.g.2
编译报错,类型不兼容,但可以直接用
13、用户控制端输入
第一步:创建键盘扫描器对象
第二步:调用Scanner对象的next()方法开始接收用户键盘输入
敲完回车键 键入的信息会自动赋值给标识符
String userInputContent = s.next();【以字符串的形式接收】
int num = s.nextInt();【以整型的形式接收】
//标识符的命名规范:见名知意 13.1 Scanner类中的方法优点一: 可以获取键盘输入的字符串 ; 优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;
13.2http://System.in和System.out方法缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取 缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。
13.3 InputStreamReader和BufferedReader方法优点: 可以获取键盘输入的字符串 缺点: 如何要获取的是int,float等类型的仍然需要转换
13.4 nextLine( )和next( )的区别
nextLine( )方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。 next( )会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。 14、方法14.1 方法的定义,语法结构
[修饰符列表] 返回值类型 方法名(形式参数列表){undefined
方法体;
}
注意:
1)修饰符列表可选项,不是必须的,目前统一写成public static;
2)方法内的修饰符列表当中有static关键字时,调用方法:类名.方法名(实际参数列表);当方法在该类中时,"类名."可以省略;
3)方法名:首字母小写,后面每个字母大写,遵循驼峰规则;
4)建议一个源文件当中只定义一个class,比较清晰; 14.2 方法在执行过程中,JVM内存的分配和变化
14.2.1 方法的定义和执行:
方法只定义,不调用是不会执行的,并且在JVM中也不会给该方法分配"运行所属"的内存空间;只有调用的时候才会分配所属的内空间;
14.2.2 JVM内存划分上主要的内存空间:
方法区内存、堆内存、栈内存(还有其他的内存空间);
14.2.3 栈数据结构 :
*栈:stack,是一种数据结构;
*数据结构是数据的存储形态;
*常见的数据结构:数组、队列、栈、链表、二叉树、哈希表/散列表;
14.2.4 方法代码文件的存储位置,内存的分配位置:
1)方法代码片段属于. class字节码文件的一部分 ,字节码文件在类的加载的时候,将其放到了方法区当中。所以JVM中的三块主要的内存空间中 方法区内存 最先有数据。存在了代码片段;
2)代码片段虽然在方法区当中只要一份,但是可以重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配【栈内存中分配方法运行的所属空间】;
3)方法在调用的瞬间会给该方法分配独立的内存空间,在发生压栈动作,方法执行结束之后,给该方法分配独立的内存空间全部释放,此时发生弹栈动作。
压栈:给方法分配内存;
弹栈:释放该方法的内存空间;
4) 局部变量在在"方法体"中声明,在栈中存储,运行时在栈中分配;
e.g.下列程序模型就是一个压栈、弹栈的过程;
14.3 栈内存的特点
1)栈帧永远指向栈顶元素
2) 栈顶元素 处于活跃状态,其他元素静止
3)术语: 压栈/入栈/push
弹栈/出栈/pop
4)栈数据结构存储数据的特点:
先进后出;
后进先出;
15、方法执行内存分析
16、方法重载(overload)
优点:
功能不相同但相似,像是在使用同一个方法一样,程序员编写代码更加方便,也不需要记忆更多的方法名,代码更美观;
(javascript不支持方法重载机制)
参数的类型不同,对应调用的方法也不同。此时区分方法不再依靠方法名了,依靠的是实参的数据类型。 16.1 什么时候考虑使用方法重载?
*功能相似的时候,尽可能让方法名相同;
【功能不同/不相似的时候,尽可能让方法名不同】; 16.2 构成方法重载的条件
1)在同一个类中
2)方法名相同
3)参数列表不同
(数量不同、顺序不同、类型不同) 16.3 方法重载的影响因素
1)方法重载和方法名+参数列表有关;
2)方法重载和返回值类型无关;
3)方法重载和修饰符列表无关; 16.4 方法重载的应用
用户自定义封装一段代码,使得在使用时更加便捷快速调用;
17、方法递归
缺点:
耗费栈内存,调用一次方法栈内存就会新分配一块所属的内存空间;
当没有结束条件时,栈内存溢出错误,错误无法挽回,只要一个结果,就是JVM停止工作;
更好看也更好用!ColorOS13带来四大升级,你想要的都安排上了在8月最后两天,OPPO举办了2022OPPO开发者大会,分享万物互融时代OPPO更智慧的软硬服一体化平台能力技术服务与最新生态成果。(ColorOS13系统)在本次大会上,OPP
湘西州传统村落展播丨保靖县吕洞山镇夯吉村红网时刻新闻通讯员田甜湘西报道夯吉村位于保靖县吕洞山镇南部,东临黄金村西接夯沙村,北壤吕洞村及黄金村,南邻吉首市。夯吉苗寨有四百多户人家,古寨分布在被当地苗民称为九龙夺宝之地势的三
得物调取手机权限删除投诉视频?得物回应删除的是临时缓存文件,已研究优化该体验11月14日,据九派新闻视频报道,11月13日晚,得物发文回应手机提示得物删除视频事件调查结果。文章称,经核实,得物App从未删除用户手机相册中的原视频,为避免占用用户手机空间进行
哺乳期被狗咬了今天3点多抱着6个多月的宝宝下楼,刚走出楼栋口一条大黄狗就朝着我跑来了,围着我转,在另一个楼门口有个老头在喊狗,狗也不听,照着我后腿那就一口,我抱着孩子也不敢动,我怕狗扑我,把孩子
试纸测出怀孕了,多久去医院呢?我是两个宝宝的妈妈,有对姐妹花,像我的话,试纸测出来怀上大宝也是啥也不懂,也不知道啥时候去医院,那会儿天天骑着电车单位家的两点一线,又是夏天,记得那天晚上下了一宿的雨,这边又排水不
鲁医生这事,好多人不要唱高调你要遇到了,可能比他还暴躁南京掌掴五岁幼儿一事,很多人都站在道德制高点上去谴责鲁医生。说但凡作为一个理智的成年人,都不会对一个五岁的孩子动手。我认为说这话的人,大概率是没有孩子的年轻人,或者是没有遇到过熊孩
回想与ULTRABOOST的这些年一年一度的双11购物狂欢节已然结束,但在今年的狂欢之中,跑圈的欢呼声似乎更多地投向了各大国产品牌,而我们曾经的老朋友adidas却只是静静的等待着。曾经双11的adidas有多疯狂
一场极其丑陋的比赛在刚刚结束的世预赛中国8076加时战胜巴林。王哲林得到27分,14篮板,周鹏12分,9篮板,赵睿11分,9助攻,在常规时间行将结束,周鹏的三分让中国队领先2分,保证了常规时间不输球
53投101分!感谢东契奇,感谢塔图姆,你们逼出了一个NBA怪兽本赛季有多个年轻人打出了炸裂级表现,其中以东契奇塔图姆的表现最为耀眼,很多人都说本赛季的MVP可能在这2人中产生。东契奇目前场均能轰下34。3分8。7板8。1助攻2抢断0。7盖帽,
一个IT男的自由职业之路(8)一锤定音探寻机会感谢网络时代,让我们获得信息是如此的便利。我查询了一下专门做数据采集的软件,比较有代表性的是火车头八爪鱼。他们的特点都是可以由使用者定义采集规则,非常灵活。火车头做得比较早
国产蔚小理的成功,是特斯拉开放专利?进入新能源汽车时代,我国终于占据了领先优势,成为全球这个行业的全球一哥,据2022世界新能源汽车大会上公布的数据,截止2021年底,全球新能源汽车累计销量突破1600万辆,中国占比