| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java SE基础语法知识点 (C语言快速转Java) -> 正文阅读 |
|
[Java知识库]Java SE基础语法知识点 (C语言快速转Java) |
目录 13.3 InputStreamReader和BufferedReader方法 1、Java程序基础1.1 JDK和JRDJDK=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 类名{ } 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()方法开始接收用户键盘输入 敲完回车键 键入的信息会自动赋值给标识符
//标识符的命名规范:见名知意 13.1 Scanner类中的方法
13.2 System.in和System.out方法
13.3 InputStreamReader和BufferedReader方法
13.4 nextLine( )和next( )的区别nextLine( )方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。 next( )会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。 14、方法14.1 方法的定义,语法结构[修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; } 注意: 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停止工作; |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:37:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |