Java程序的基本结构
首先咱们就先上原料,然后开始盘它!
package ErrorCodesIT; //创建包,当前所在包名
import java.util.Scanner; //导入所用到的其他包
public class HelloWorld { //创建类,HelloWorld类
public static void main(String args[]) { //定义主方法
Scanner sca=new Scanner(System.in);
System.out.println("请输入当前年份:");
int input=sca.nextInt();
int remain=input%2;
if(remain==1)
System.out.println(input+"年为奇数年");
else
System.out.println(input+"年是偶数年");
}
}
注意:
Java严格区分大小写
”public static void main(String args[])“,即main主方法是Java应用程序的入口点,程序从该方法开始执行,且该方法是固定死要这样写的,不可改写,否则运行出错
Java代码编写时,必须要在英文输入状态下输入
一个语句结束必须要用引号“;”结尾
-整个Java程序的层次关系我用一个图来简要说明:
简单点说就是:
- 最大的外层是一个 package(包),该包里可以导入其他的包
- 包 里面可以创建多个 class(类)<建议一个包只装一个类>
- 类 里面可以定义多个 成员变量 和 方法
- 方法 里再定义的变量就是 局部变量
Java标识符
给需要起名字的,起个名字,该名字即为 标识符
标识符命名有规则:
- 只能由 字母(广义上的)、数字、下划线 和 美元符号 组成,且 不能以数字开头
- 严格区分大小写
- Java 使用 Unicode标准字符集,之前提到的 字母 ,指的是 该字符集中所有字符
- 不能用保留字
Java保留字
Java保留字包括:
- 关键字(51个)
- 未使用的保留字(2个)(考虑未来的扩展性)
注:保留字不可被用来做 标识符
详情链接:Java保留字详情
Java基本数据类型
上图:
注:
- 1B(一个字节)= 8 bit(8位) ,数据为系统分配给该类型的空间
- long 和 float 类型赋值时,末尾必须加相应字符 ,double 类型不强制要求
- char 类型,赋值时,单引号‘ ’ 将一个字符括起来
- 转义字符,‘\’ 开头,例:‘\n’ ,作为值时,也要被单引号‘ ’ 将括起来
单精度float:显示时,小数点1位+7位小数 = 8位
双精度double:显示时,小数点1位+15位小数 = 16位
浮点型数据(小数的二进制表示法)在内存中的存储方式:符号位 + 指数位 + 小数位(即尾数位)
取值范围取决于指数位,计算精度取决于小数位(尾数)。
另:别看上图里有很多小数位,但是实际里,精度仅能控制在有效位范围内,超出后就乱来了,不再精确。(更具体的,我也还没完全了解透彻,待后续补充)
常量与变量
- 常量(final变量):经过一次赋值后,其值不能被改变
- 变量:其值能改变
- 成员变量:在类中被声明
- 实例变量:常规方式变量声明
- 静态变量:static 数据类型 变量名[=值] 例(在Student类中):static int year = 2020,该方式声明的变量可 跨类调用 ,调用方法: 类名.静态变量名 例:System.out.println(Student.year)
- 局部变量:在类中的 方法中 被声明
- 成员变量:在类中被声明
注:两者都要先声明才能使用
另外:
把分配存储空间的声明称为“定义”,把不分配存储空间的称为“声明”
局部变量与成员变量 重名 时,在局部变量作用域内,成员变量被隐藏而失效,只有局部变量有效
变量的有效范围(作用域):除了静态变量和重名而被隐藏失效的情况外,变量在哪个代码段里被声明(以大括号界定),就在该代码段里有效(包括该代码段里嵌套的代码段哦)
如果定义的常量是成员变量,必须在定义时赋初值
-
变量声明规则:
- 使用有效、合法的标识符(最好只用英文字母)
- 变量不能重复(防止调用出错)
- 选择有意义的单词作为变量名(增强可读性和可维护性)
-
常量声明格式为: final 数据类型 常量名[=值] 例:final float PI = 3.14
(常量名最好用 全大写英文字母)
运算符
-
赋值运算符,左边 必须是 一个变量 ,且赋值可连接:a=b=c=99(不建议这样)
-
算术运算符(0不能做除数,否则报错:ArithmeticException)
-
自增/自减运算符(++/- - 写在前: ++a,表示在使用a前先给当前a+1或者-1之后,才可使用一次自增自减结果后的a,写在后则反之 ,先使用a,再进行一次自增或自减,然后做下一步动作)
-
比较运算符(结果值要么为false要么为true)
-
逻辑运算符(‘&&’、‘||’ 和 ‘&’、‘|’ 的区别:前两者为‘短路’运算符,左端的表达式结果可直接推出最终结果,则不再做其他运算,而后两者要做所有运算,为‘非短路’运算符,推荐使用前两者)例: 2>3 && 4<9 ,左端结果为false,且在做‘与运算’,直接得最终结果:false,而不再做右端运算
-
位运算符(操作数 为整型和字符型,直接操作内存中二进制形式表示的数据)
1.‘按位取反’运算(~a)
2.‘按位与’运算(a&b)
3.‘按位或’运算(a|b)
4.‘按位异或’运算(a^b):异值(0和1)为1,同值为0- 移位运算符( 操作数类型: byte、short、char、int、long)
5.‘左移’运算(66<<1):内存中整个66的二进制串向左移1位,空出位全补0,最终值变
6.‘右移’运算(99>>1):内存中整个99的二进制串向右移1位,看最高位,若最高位为1全补1,若最高位为0全补0
7.‘无符号右移’运算(88>>>1):内存中整个66的二进制串向右移1位,空出位全补0 -
三元运算符:‘(表达式 ? 表达式true往这走 : 表达式false往这走)’
例:(int a = 54>36?100:200)结果为100
算符优先级
即:在混合运算情况下的运算顺序~
一张表你就懂了,忘记时候自己来翻,久了就熟了
简单归纳一下就是:
括号 > 一元运算(正负max) > 算术运算(移位min) > 比较运算 > 逻辑运算(非短路 > 短路)> 赋值运算
Java里的类型转换
-
自动类型转换(隐式类型转换):小空间类型自动转到大空间类型(或低精度自动转到高精度)
-
**强制类型转换(显式类型转换):
方法: (要转的类型)待转类型的数据 例:int a = (int)36.98
大空间类型强制转到小空间类型(或高精度自动转到低精度)**
代码注释和编码规范
这个标题主要是为了让你编写出来的代码更美丽,让别人读起来更轻松易于理解。
Java源程序的任意位置都可添加注释语句,被注释内容会被Java编译器忽略而不进行编译
-
注释方式:
- 单行注释:‘// 注释内容’
- 多行注释:‘/* 注释内容 */’ (不可嵌套使用)
- 文档注释:‘/** 注释内容 */’
(出现在任何声明之前<如类的声明>,会被javadoc工具读取作为javadoc文档内容)
-
程序中的注释要占程序代码总量的20%~50%,可见其重要性
在 合适的位置添加简洁有效的注释,非常有必要,希望这能成为大家的习惯,而不是因为嫌麻烦去忽略掉!
-
编码规范(使代码规整,这个在Java官方好像有这文档)
这东西应该内化为自我的编码风格~- 每条语句独占一行
- 每条语句要以英文状态下的分号‘;’结束(否则报错:illegal character)
- 声明变量时分行声明,即便是同类型的,这样方便对变量进行注释说明
- 再次强调:要合理注释
- 还有很多,若我找到官方文档链接再贴出来给大家