注释
注释的作用:解释代码功能,增强可读性。
java中有三种注释:
- 单行注释:
//注释内容
- 多行注释:
/* 注释内容 */
- 文档注释:
/** 注释内容 */
特点:
- 单行注释和多行注释,注释了的内容不参与编译。换句话说,编译以后生成的
.class
结尾的字节码文件中不包含注释掉的信息 - 文档注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
写注释是一种良好的习惯,毕竟当项目代码量上去了以后,不说交给别人阅读,可能自己都看不懂自己写得是啥了。
关键字与标识符
常用关键字
关键字是被Java语言赋予了特殊含义,用做专门用途的字符串(单词),关键字中所字母都为小写
标识符
凡是自己可以起名字的地方都叫标识符,包括包名、类名、接口名、变量名、方法名、常量名等
注意点:
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名。
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary、#abc
规范:(建议参考 阿里巴巴Java开发手册)
- 包名:多单词组成时所有字母都小写:
xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:
XxxYyyZzz
(大驼峰式) - 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:
xxxYyyZzz
(小驼峰式) - 常量名:所有字母都大写。多单词时每个单词用下划线连接:
XXX_YYY_ZZZ
强弱类型语言
强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。
例如:java、.NET、C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。int a=123。a不经过转换不会变成字符串。
而python、JavaScript等就是弱类型语言。
Java每个变量有类型,每个表达式有类型,而且每种类型是严格定义的。其次,所有的数值传递,不管是直接的还是通过方法调用经由参数传过去的都要先进行类型相容性的检查。Java 编译器对所有的表达式和参数都要进行类型相容性的检查以保证类型是兼容的。任何类型的不匹配都是错误的,在编译器完成编译以前,错误必须被改正。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。
数据类型
Java的数据类型分为两大类:基本类型(primitive type)和引用类型 (reference type),引用数据类型主要包括类、接口、数组以及自定义类型等,不在这里展开说明,只要先记住引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!
基本数据类型
基本数据类型共有8种,可以分为三类:
- 数值型:整数类型(byte、short、int、long)和浮点类型(float、double)
- 字符型:char
- 布尔型:boolean
8种基本数据类型可以使用包装类查看大小和取值范围。
扩展形式:
- Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。
- 可以使用下划线分隔符按照自己的习惯进行分割特别长的数字,例如1_3456_8899,代表1亿3456万8899。(JDK7新特性)
注意一下几点:
- 整数的默认类型为int(声明Long型在末尾加上l或者L,尽量用大写L,因为小写l容易和数字1混淆)
- 浮点数的默认类型为double(如果需要声明一个常量为float型,则必须要在末尾加上f或F)
- 八种基本数据类型的包装类:除了char的是Character、int类型的是Integer,其他都是首字母大写
- 整型:8进制,使用0开头,十六进制整数以0x或0X开头,二进制整数以0b开头(JDK7新特性)
- 浮点型:尽量避免使用浮点型进行比较和计算,对于有精确数值要求的使用BigDecimal类。
- 字符类型:char类型是无符号的,不能为负,所以是0开始的。char 类型用来表示在Unicode编码表中的字符,可允许有65536个字符。
- 布尔型:占一位,不是一个字节,一般用于程序逻辑判断及流程控制
位和字节
一、字节定义:
字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。
二、不同编码环境下的换算
ASCII码:一个英文字母(不分大小写)占一个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数。换算为十进制,最小值-128,最大值127。如一个ASCII码就是一个字节。
UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。
Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节
三、B 与 bit
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
计算机中的换算关系:
1B(Byte) = 8b(bit) --> 1字节 = 8位(0,1)的二进制数据
1KB = 1024B
1MB = 1024KB
本章节内容来源于https://www.cnblogs.com/yxcn/p/12971968.html
类型转换
由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。
整型、实型(常量)、字符型数据可以混合运算。
运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级(根据容量来看)。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
类型转换分为两种:
- 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型,简单理解就是从低到高转换。
- 强制类型转换,又被称为造型,用于显式的转换一个数值的类型,简单理解就是从高到低转换。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出,而且前提条件是转换的数据类型必须是兼容的。
数据类型转换必须满足如下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
变量和常量
变量
变量是Java程序中的基本存储单元,它的定义主要包括变量名、变量类型和变量的作用域三个部分。变量在使用前必须声明,每个变量都有类型,可以是基本数据类型,也可以是引用类型。
变量的作用域:
- 局部变量(lacal variable):方法或语句块内部定义的变量,在使用前必须先声明和初始化(赋初值)。
- 实例变量(成员变量:member variable):方法外部、类的内部定义的变量,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
- 类变量(静态变量: static variable):使用static定义,从属于类,生命周期伴随类始终。如果不自行初始化,它会自动初始化成该类型的默认初始值,与实例变量的区别是使用static修饰。
常量
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
运算符
运算符指在计算机中对常量或者变量进行操作的符号。
java运算符有六类:算术运算符、赋值运算符、比较运算符、逻辑运算符、条件(三目)运算符、位运算符。
- 算术运算符:+(加),-(减),*(乘),/(除),%(求余),++(自增),--(自减)
- 赋值运算符:=(等于),+=(自加一次等于),-=(自减一次等于),*=(自乘一次等于),/=(自除一次等于),+(字符串连接符)
- 比较运算符:>(大于),<(小于),>=(大于等于),<=(小于等于),==(比较等于),!=(不等于),返回结果只有:true或者false
- 逻辑运算符:&(按位与),&&(短路与),|(按位或),||(短路或),!(非,即取反)
- 条件(三目、三元)运算符:?:
- 位运算符(都是基于二进制来计算):&(按位与),|(按位或),^(异或运算),<<(左移运算符),>>(右移运算符),>>>(无符号运算符),~(非、取反运算符)
运算符优先级:
Java包(package)
package是一个为了方便管理组织java文件的目录结构,并防止不同java文件之间发生命名冲突而存在的一个java特性。
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用
- 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
- 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
包语句的语法格式为:
package pkg1[.pkg2[.pkg3…]];
一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。
开发者可以自己把一组类和接口等打包,并定义自己的包。而且在实际开发中这样做是值得提倡的,当你自己完成类的实现之后,将相关的类分组,可以让其他的编程者更容易地确定哪些类、接口、枚举和注释等是相关的。
由于包创建了新的命名空间(namespace),所以不会跟其他包中的任何名字产生命名冲突。使用包这种机制,更容易实现访问控制,并且让定位相关类更加简单。