步子百科步子百科

begin是什么意思(跟光磊学Java开发)

注释

注释(Comments)是意思在程序中指定位置(通常是代码的上方)添加的说明性信息,方便程序员更好的跟光阅读代码。Java的磊学注释有三种,分别是意思单行注释,多行注释和文档注释

单行注释只能用于注释一行,跟光使用//后面跟上注释的磊学内容,通常用于方法的意思内部多行注释可以注释在多行,使用/**/,跟光多行注释不能嵌套使用,磊学否则程序会出现编译错误。意思文档注释使用/***/用于生成API文档时使用,跟光不过在进行项目开发时通常在类、磊学方法、意思属性上都会使用文档注释package net.ittimeline.java.core.jdk.foundational.syntax; //声明包为net.ittimeline.java.core.jdk.foundational.syntax/** * Java三种注释的跟光使用 */public class Comments { /** * Java程序的入口 * 如果程序没有main方法,则无法运行 * @param args */ public static void main(String[] args) { //终端打印输出 Hello World with Windows10 1903 & JDK11.0.9 &Visual Studo Code 并换行 System.out.println("Hello World with Windows10 1903 & JDK11.0.9 &Visual Studo Code"); }}

程序运行结果

注释的磊学注意事项

注释的内容不会影响程序的运行结果日常开发中应该给程序添加适当的注释,降低程序后期的维护成本以及增加代码的可读性关键字和标识符

关键字是Java赋予了特殊含义的英文单词,例如在编写HelloWorld程序时,package,public、class、static、void都是关键字。关键字都是小写的单词,常用的编辑器中(例如Visual Studio Code)的关键字都是有特殊颜色的标记

但是main不是关键字,main方法在程序运行时由JVM调用。

常量

常量指的是程序运行时,其值不会发生改变的量(也就是数据),例如HelloWorld程序中的"Hello World with Windows10 1903 & JDK11.0.9 &Visual Studo Code"就是字符串常量,无论程序运行多少次,其值都不会发生改变。日常开发中经常使用的常量类型如下

字符串常量: 使用""包含的内容整数常量:例如9就是一个整数常量小数常量:例如3.14就是一个小数常量字符常量: 使用’‘ 包含的内容,只能存储单个字符布尔常量:取值只能是true或者false,用于关系运算和逻辑运算空常量:null,该值不能打印输出package net.ittimeline.java.core.jdk.foundational.syntax;/** * * * Java常量的使用 * 字符串常量: 使用""包含的内容 * 整数常量:例如9就是一个整数常量 * 小数常量:例如3.14就是一个小数常量 * 字符常量: 使用’‘ 包含的内容,只能存储单个字符 * 布尔常量:取值只能是true或者false * 空常量:null,该值不能打印输出 */public class Constants { public static void main(String[] args) { //字符串常量的使用 System.out.println("跟光磊学Java开发"); //整数常量的使用 System.out.println(29); //小数常量的使用 System.out.println(3.14); //字符常量 只能包含单个字符 System.out.println('a'); //布尔常量的使用 ture和false也是关键字 System.out.println(true); System.out.println(false); //编译错误,null不能输出 //System.out.println(null); }}

程序运行结果

数据类型计算机存储单位

计算机主要用来计算、存储和传输数据,无论是内存还是硬盘,计算机存储设备的最小信息单元叫做位(bit),也被称之为比特位,通常使用小写字母b来表示,而计算机的最小存储单元叫做字节(Byte),通常由大写字母B表示,字节是由连续的8个位组成。

日常生活中经常使用存储单位的换算关系

1Byte=8it1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB1PB=1024TB

其中KB,MB通常用于表示网络下载速度,而GB、TB用于表示内存、磁盘存储,PB用于表示数据中心的日处理数据量。

但是网络运营商的网速是Mb/s,而磁盘、内存存储的最小单位是Byte,因此宽带运营商号称的100M宽带实际下载速度是100Mb/8=12.5MB,也就是10M左右。

硬盘开发商是以1000作为换算的,4T硬盘的实际可用空间是4*1000*1000*1000*1000/1024/1024/1024/1024≈3.63T

Java数据类型概述

Java语言是强类型的语言,对于每一种数据都给出了明确的数据类型,不同的数据类型分配了不同的内存空间,所以它们表示的大小是不一样的。不同的类型内存的存储结构也不一样,不同的数据类型执行的运算类型也不一样。

Java的数据类型分为基本数据类型和引用数据类型两大类,其中基本数据类型有八种,分别是byte,short,char,int,long,float,double和boolean,引用数据类型有

引用数据类型有类、接口和数组,这里先探讨8种基本数据类型。

数据类型 关键字 取值范围 内存占用(字节)整数 byte -127到128 1整数 short -32768到32767 2整数 int -2的31次方到2的31次方减1 4整数 long -2的63次方到2的63次方减1 8单精度浮点型 float 1.401298e-45到3.402823e+38 4双精度浮点型 double 4.9000000e-324到1.797693e+308 8字符型 char 0到65535 2布尔型 boolean true,false 1

其中e+38表示乘以10的38次方,e-45表示乘以10的-45次方。

整数类型默认是int,浮点数类型默认是double。例如整数9默认的数据类型就是int,而3.14的数据类型默认就是double类型。

变量变量概述

程序运行时会被加载到内存中,而如何操作内存中的数据,编程语言引入了变量的概念,用来简化数据的操作。

变量就是内存的存储空间,该空间存储着经常发生改变的数据。例如淘宝登录的场景,不同的用户会输出不同的用户名和密码来登录淘宝,而用户名和密码就是两个变量。

变量的定义和使用

变量在使用前必须定义,其定义的语法格式为数据类型 变量名 = 数值;,其中数据类型就是限定空间存储的数据的类型,而变量名就是空间的别名,操作变量名就等价于操作那块空间的内容,=表示把右边的数值赋值给左边的变量。例如int age=29;就表示把整数29赋值给变量age,而age =30;就表示将变量的值修改为30

package net.ittimeline.java.core.jdk.foundational.syntax;/** * 基本数据类型的变量定义和使用 */public class Variable { public static void main(String[] args) { //整数变量 int age = 29; //打印输出变量age的值 System.out.println(age); //修改变量age的值 age = 30; //此时输出30 System.out.println(age); //浮点类型的变量定义 double dbl=3.14; System.out.println(dbl); //字符型变量 char ch='a'; //打印输出字符变量的值 System.out.println(ch); ch='b'; //打印输出字符变量的值 此时输出b System.out.println(ch); //布尔类型的变量 boolean bl=false; //打印输出变量bl的值 此时输出false System.out.println(bl); bl=true; //打印输出变量bl的值 此时输出true System.out.println(bl); }}

程序运行结果

在定义变量和使用时还有些注意事项

同一个作用域的变量名不允许重名,作用域通常指的是{ }一条语句可以定义多个变量,但是变量之间使用逗号分隔,在Java中使用;表示一条语句的结束,例如int left=10,middle=20,right=30;表示声明三个整数变量并分别赋值为10,20,30变量在使用前必须要赋值,例如先声明一个整数变量int number; 然后使用 System.out.println(number);语句打印输出变量的值之前需要给变量赋值,如果没有赋值编译器会提示可能尚未初始化的变量如果定义float类型的变量,变量的数值后要加是f或者F后缀,例如float flt =3.14F;如果不加F后缀编译器会提示不兼容的类型,因为3.14默认是double类型。用于表示该变量是float类型,如果定义long类型的变量,变量值后面加上L后缀,例如long lng =1000000L;变量只有在定义的大括号{ }作用域内有效,如果超出了其作用域则无法使用。读取键盘输入

之前定义变量时,变量的值都是写死的,这样的程序是不够灵活的。通过读取键盘录入,可以让程序操作的数据更加灵活,这里可以使用Scanner来读取用户从键盘输入的值。

package net.ittimeline.java.core.jdk.foundational.syntax;import java.util.Scanner;/** * * 使用Scanner读取用户键盘输入 */public class ScannerInt { public static void main(String[] args) { System.out.println("请输入你的年龄"); //创建Scanner对象,默认从标准输入读取数据 Scanner input=new Scanner(System.in); //读取用户从键盘输入的年龄 int age=input.nextInt(); //输出用户输入的年龄 System.out.println(age); //关闭键盘 input.close(); }}

程序运行结果程序运行时首先会输出 请输入你的年龄 并换行,然后此时程序处于阻塞状态,等待用户输入年龄。当用户输入年龄后会将用户输入的年龄输出在终端上。

Scanner类位于java.util包中,在使用Scanner类之前需要在包声明语句下使用import java.util.Scanner;来导入Scanner类,然后在main方法中使用Scanner input = new Scanner(System.in);来创建一个Scanner对象,System.in表示标准输入,也就是使用Scanner从标准输入中获取数据,然后使用Scanner类型的变量input来通过.nextInt()调用从标准输入设别中获取一个整数的方法。

标识符

标识符就是给程序中的元素(例如包名,类名,方法名)取名字,在取名字时需要遵守相关的规则和规范

标识符的命名规则:

标识符不能是Java的关键字和保留字,关键字是Java中被赋予赋予特殊含义的单词,例如public static void等等。保留字是现有Java版本尚未使用,但是未来的Java版本可能会做关键字使用的单词,例如goto,const。但是可以包含关键字,保留字。标识符可以由字母、数字、下划线组成,但是不能以数字开头,严格区分大小写

日常开发中应该严格遵守标识符的命名规则,否则程序会出现编译错误。

标识符的命名规范:

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使 用单数形式,但是类名如果有复数含义,类名可以使用复数形式。,例如com.taobao类名单词首字母大写,多个单词首字母也要大写,例如HelloWorld变量名、方法名首字母小写,后面单词首字母大写,例如myName,testVariable()常量名单词字母全部大写,多个单词使用下划线隔开,例如ORDER_TYPE虽然Java支持Unicode字符集,但是标识符不能是中文,同时禁止使用中英文混合命名,更不允许直接使用中文的命名方式,建议命名时见名知意。由于软件开发是团队协作,标识符的命名规范不遵守不会出现错误,但是遵守标识符的命名规范可以提高程序的可读性,便于后期维护,因此日常开发中也应该严格遵守。package net.ittimeline.java.core.jdk.foundational.syntax; //包名都是小写字母/** * Java标识符的命名规则和命名规范 */public class Identifier { public static void main(String[] args) { CustomerInfo customerInfo = new CustomerInfo(); customerInfo.setCustomerName("tony"); System.out.println("customerInfo name is " + customerInfo.getCustomerName()); System.out.println("customerInfo id card id " + CustomerInfo.CUSTOMER_ID_CARD); }}/** * 类的命名 单词首字母大写 后面单词首字母大写 */class CustomerInfo { /** * 成员变量的命名 首字母小写 其他单词首字母大写 */ private String customerName; /** * 常量的命名 字母都大写,多个单词之间使用下划线隔开 */ public static final String CUSTOMER_ID_CARD = "430904458902219877"; /** * 方法的命名 首字母小写,后面单词首字母大写 * * @return */ public String getCustomerName() { return this.customerName; } public void setCustomerName(String customerName) { this.customerName = customerName; } }类型转换

赋值(=)时需要保持=两边的数据类型一致,如果不同数据类型运算,并将运算结果赋值给变量时就需要进行类型转换,类型转换分为两种。

隐式类型转换隐式类型转换是将数据类型中取值范围小的数据自动转换为取值范围大的数据。例如int和double运算的结果类型是double,因为double类型的取值范围大于int的取值范围,七种数据类型再进行运算时会遵守以下隐式转换原则: byte->short->int->long->float->double, char->int->long->float->double,其中long虽然占据8个字节,但是小数内部采用指数方式存储,因此虽然float只占4个字节,但是取值范围大于long,因此float类型和long类型的变量运算的结果是float。当小的数据类型(例如int)和大的数据类型(double)在运算时,会首先将小的数据类型(int)提升为大的数据类型(double)后再进行运算。byte,short,char三种数据类型在运算的时候,不管是否有更高的数据类型,都会先提升为int后再进行运算。package net.ittimeline.java.core.jdk.foundational.syntax;/** * * 数据类型转换之强制类型转换 * */public class NarrowConversion { public static void main(String[] args) { double balance=10000.12; System.out.println(balance); //不使用强转则会编译错误 Type mismatch: cannot convert from double to intJava(16777233) //int intBalance=balance; int intBalance=(int)balance; System.out.println(intBalance); byte left=10; byte right=20; //将 left+right的运算结果转换为byte后赋值给变量byteResult byte byteResult=(byte)(left+right); System.out.println(byteResult); }}

程序运行结果

强制类型转换强制类型转换是将一个表示数据范围大的数值或者变量赋值给另外一个表示数据范围小的变量,强制类型转换的格式为 目标数据类型 变量名 = (目标数据类型) 常量值或则变量名;package net.ittimeline.java.core.jdk.foundational.syntax;/** * * 数据类型转换之强制类型转换 * */public class NarrowConversion { public static void main(String[] args) { double balance=10000.12; System.out.println(balance); //不使用强转则会编译错误 Type mismatch: cannot convert from double to intJava(16777233) //int intBalance=balance; int intBalance=(int)balance; System.out.println(intBalance); byte left=10; byte right=20; //将 left+right的运算结果转换为byte后赋值给变量byteResult byte byteResult=(byte)(left+right); System.out.println(byteResult); }}

程序运行结果

在进行强制类型转换时有可能会损失精度,为啥说是有可能而不是肯定会损失精度呢?例如int age=29; ,byte byteAge=(byte)age; ,此时就没有发生精度的损失,因为byte的取值范围是-127到128。

而常量在进行运算时编译器会在编译时就会先运算,并且判断运算的结果在不在赋值的变量对应数据类型的取值范围之内,如果在的话就编译通过,如果不在则会编译错误

package net.ittimeline.java.core.jdk.foundational.syntax;/** * * 常量的类型转换 */public class ConstantConversion { public static void main(String[] args) { //100和80是两个常量,而Java存在常量优化机制,会在编译时让100和80自动相加,并判断结果在不在short的范围内,如果在的话就编译通过,如果不在编译错误 short shortResult=100+80; System.out.println(shortResult); }}

程序运行结果