Java基础(二)
一、第一个Java程序的深入理解
这是我们在上篇目中写的第一个java小程序 Helloworld,我们根据它来稍微分析理解一下其中的组成成分
public class Demo{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
简要分析:
public 权限修饰符 公开的
class 类,java中所有的代码都是以类为单位的
Demo 类名 (遵循标识符规则)
static 静态的,修饰符
void 返回类型
main 主方法名称
System.out.println(); 方法具有某些功能,功能由方法内部编写的逻辑决定,这是一个具有输出功能 的方法
" " 双引号包裹起来的内容就是输出内容
; 分号一般代表一条语句结束
[]、()、{} 全部都是成对出现
() 括号里面的内容叫做参数,是否为空视情况而定,看见()说明该处应该定义/调用了方法
[] 代表数组出现了
{ 包裹着代码块
1、权限修饰符
public | 公共的公开的,全项目可见 |
---|---|
protected | 受保护的,仅异包非子类不可见 |
空白 | 默认为同包可见 |
private | 私有的,仅同类中可见 |
外界能否调用某个类中的方法或属性,就是由这个类中各个成员的权限修饰符来决定
2、标识符
什么是标识符?
就是用来给类、方法、变量、常量等等起名字的
上面提到了标识符规则,那么它的规则有哪些呢?
- 只能以字母、下划线、美元符号$开头,后面接数字、字母、下划线、美元符号(注意不能以数字开头)
- 不能是java中已经被赋予特殊用途的关键字,例如上面出现的4个权限修饰符和class等,有兴趣可以查询Java关键字表,一般关键字在代码编辑工具中会被标蓝
- 严格区分大小写
- 长度无限制(看起来不对劲但事实确实如此)
也就是说,可以把标识符理解为类、方法、变量和常量的名字,既然是名字,那么自然不能够随心所欲乱起,需要有一些含义,在Java中也一样,所以除了遵守标识符规则外,还有两个约定:
- 见名知意------不能随意写,这个类/方法/变量/常量是用来干什么的或者代表什么,用英文起名,例如"名字"这个属性,不能够用"mingzi"或者"mz"之类,应该用"name";这是约定俗成的常识,并不是严格的命名规则
- 驼峰原则------若一个标识符里含有几个单词,对于类名来说,从第一个单词开始首字母要大写,比如MyName,对于方法、变量名来说,第一个单词全小写,从第二个单词开始每个单词的首字母需要大写,例如studentId,这里需要注意的是常量应该使用全大写来命名
3、变量
概念:由开发者声明出来,在程序执行过程中其值可以发生改变
变量的使用方法:在需要使用的地方声明,根据声明的地方分为两类,全局变量和局部变量,全局变量 声明在类中方法外,局部变量声明在方法中;二者的区别是使用范围或者说生命周期 不同,全局变量在整个类中都可以使用,局部变量只在声明它的方法内可以使用
变量的声明方法: 数据类型 变量名 ;
注意:java当中的变量如果要使用一定要声明且初始化,初始化可以和变量的声明放在同一处,格式是 数据类型 变量名 = 初始化的值;// int number = 1;
4、常量
概念:在程序执行过程中,有一些值是永远不会发生改变的或者说永远不需要它发生改变,那么就可以 把它声明为常量
常量分为两类:
字面值常量 譬如数字1 2 3 4 等
符号常量 譬如SCHOOL_NAME(所有字母大写,若有多个单词那么单词间用下划线连接),通常用 final这个单词来修饰,表示后面声明的这个东西是常量
5、数据类型
在Java中,每个数据都有它自己的数据类型,数据类型总共有以下几个分类:
基本数据类型 |
---|
整数类型 |
byte 字节型,占1字节,取值范围 -128~127 |
short 短整型,占2字节,取值范围大概为正负3万 |
int 整型,占4字节,随意输入的任意整数系统默认为 int 类型,取值范围大概为正负21亿 |
long 长整型,占8字节,使用时若超出 int 的取值范围则需要在这个巨大的数字后加上字母L表示 |
小数类型 |
float 单精度浮点型,占4字节,精确到小数点后8位,所有小数都是近似值而不是准确值 |
double 双精度浮点型,占8字节,精确到小数点后16位,默认输入的随意小数为double类型 |
逻辑型 |
boolean 布尔型,占1字节,实际使用1位,只有两个值,true/false |
字符型 |
char 字符型,暂时理解为2字节即可 |
引用数据类型 |
类 |
数组 |
接口 |
既然谈到了变量和数据类型,那么就必须说说赋值方式,计算机中一直都是以2进制存储数据,在开发过程中除了10进制和2进制,我们还能接触到其他几种较为常用的进制
十进制:最常用,逢十进一,没啥好说的,赋值时直接用赋值符号 " = "后接十进制数字即可;
二进制:这是在jdk1.7版本后才有的直接赋值方式,赋值时以0B或0b开头,后接一个二进制的值;
八进制:以0开头,后接一个八进制的值;
十六进制:以0X或0x开头,后接一个十六进制的值
需要稍微注意的是,当一个整数过长不方便阅读时,可以用下划线将这个巨大的整数分割开,不会影响它原有的值,类似银行账单内数字每三位一个逗号的作用。说完了数据类型和赋值,那么就会存在一个小小的疑问,这些数据类型之间可以互相转换吗?
答案是可以的,但并不是所有的类型都可以互相转换,既然是转换,那么一定需要遵守某些规则(引用类型抛开不谈):
按照所占字节大小,从小到大,可以进行自动类型转换,boolean类型是孤独的,它不掺和
byte->short->int->long->float->double
char(指向int)
举个栗子(滑稽):
byte b = 10;//声明一个byte类型的变量并给它赋值为10 int num = b;//通过赋值符号来把b的值赋给更大的int类型变量,这个10会被自动转换成int类型
若要逆箭头方向从大类型转换为小类型,则需要手动强制转换,强转需要特殊的格式,即在大类型的变量名前用括号包裹想要转换的小类型
举个栗子(滑稽):
int num = 10;//声明一个int类型的变量并初始化值为10 byte b = (byte) num;//大转小必须强转,否则报出检查时异常(底下标红波浪线),无法完成赋值操作
强转是有风险的,当大类型的值超过了小类型的取值范围,那么转换后的结果是错误的,所以建议谨慎使用嗷
6、运算符
运算符使用广泛且频繁,但学习起来并不困难,在Java中运算符分为以下几类
算术运算符: +、-、*、/、%(求余)、++(自增)、–(自减) |
---|
逻辑运算符:&(与)、|(或)、!(非)、^(两侧真假性相同则结果为true)、&&(短路与)、||(短路或) |
关系运算符:>、<、==(等于)、>=、<=、!=(不等) |
赋值与拓展运算符:=、+=、-=、*=、/= |
条件运算符: ?: 也称为三目运算符 |
有以下几个需要注意的点:
自增和自减符号既可以放在变量前(++i/–i)表示先参与运算然后自加/自减,也可以放在变量后(i++/i–)表示先自加/自减然后参与运算;
短路与&&使用时,若左边逻辑表达式的值为false,则结果必为false,那么系统会跳过符号右边的逻辑表达式,根本不会去判断它的值是true还是false,这提升了程序运行的效率;
短路或||使用时,若左边逻辑表达式的值为true,则结果必为true,系统同样会跳过右边的表达式;
普通的与& 、或|使用时系统需要把符号两边的表达式全部判定出结果才能得出最终结果;
a+=b;这个表达式等价于a=a(旧)+b; 表示原来的a与b相加后得到的新值重新赋给a,其他拓展运算符同理;
==并不是常规意义上的"值相等"这个含义,而是比较在内存中左右两边变量的存储地址是否相同;
三目运算符的使用方式: 表达式1(判断true/false) ? 表达式2 : 表达式3
如果表达式1的值是true ,这个三目运算符的结果是表达式2的值
如果表达式1的值是false,这个三目运算符的结果是表达式3的值
如果不怕把自己绕进去,三木运算符可以无限嵌套使用,你懂的
都已经说这么多了,干脆再理一理运算符之间的优先级吧
- 算数 > 关系 > 逻辑 > 三目 >赋值
- 单目>双目>三目
- 括号优先
- 扩展运算符与赋值运算符优先级最低
哦吼这么多了,写累了,下篇见。