Java基本语法(上):变量与运算符
关键字与保留字
关键字(keyword)的定义和特点
- 定义:被Java语言赋予特殊含义,用作专门用途的字符串(单词)
- 特点:关键字中所有字母都为小写
- 官方地址:
保留字 - Java保留字:比如goto、const
标识符(Identifier)
- 标识符
- Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。
- 技巧:凡是自己可以起名字的地方都叫标识符 - 定义合法标识符规则
- 由26个英文字母大小写,0-9 ,_或$ 组成
- 数字不可以开头
- 不可以使用关键字和保留字,但能包含关键字和保留字
- Java中严格区分大小写,长度无限制
- 标识符不能包含空格 - Java中的名称命名规范
- **包名:**多单词组成时所有字母都小写:xxxyyyzzz
- **类名、接口名:**多单词组成时,所有单词的首字母大写:XxxYyyZzz
- **变量名、方法名:**多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- **常量名:**所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
- 注意1:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
- 注意2:java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。
代码整洁之道笔记
整理人:尚硅谷 - 宋红康老师第2章 有意义的命名
2.1 介绍 软件中随处可见命名。我们给变量、函数、参数、类和包命名。我们给源代码及源代码所在目录命名。 这么多命名要做,不妨做好它。下文列出了取个好名字的几条简单规则。2.2 名副其实,见名知意
变量名太随意,haha、list1、ok、theList 这些都没啥意义2.3 避免误导
包含List、import、java等类名、关键字或特殊字;
字母o与数字0,字母l与数字1等
提防使用不同之处较小的名称。比如:XYZControllerForEfficientHandlingOfStrings与XYZControllerForEfficientStorageOfStrings2.4 做有意义的区分
反面教材,变量名:a1、a2、a3
避免冗余,不要出现Variable、表字段中避免出现table、字符串避免出现nameString,直接name就行,知道是字符串类型
再比如:定义了两个类:Customer类和CustomerObject类,如何区分?
定义了三个方法:getActiveAccount()、getActiveAccounts()、getActiveAccountInfo(),如何区分?2.5 使用读得出来的名称
不要使用自己拼凑出来的单词,比如:xsxm(学生姓名);genymdhms(生成日期,年、月、日、时、分、秒)
所谓的驼峰命名法,尽量使用完整的单词2.6 使用可搜索的名称
一些常量,最好不直接使用数字,而指定一个变量名,这个变量名可以便于搜索到.
比如:找MAX_CLASSES_PER_STUDENT很容易,但想找数字7就麻烦了。2.7 避免使用编码
2.7.1 匈牙利语标记法
即变量名表明该变量数据类型的小写字母开始。例如,szCmdLine的前缀sz表示“以零结束的字符串”。
2.7.2 成员前缀
避免使用前缀,但是Android中一个比较好的喜欢用m表示私有等,个人感觉比较好
2.7.3 接口和实现
作者不喜欢把接口使用I来开头,实现也希望只是在后面添加Imp2.8 避免思维映射
比如传统上惯用单字母名称做循环计数器。所以就不要给一些非计数器的变量命名为:i、j、k等2.9 类名
类名与对象名应该是名词与名词短语。如Customer、WikiPage、Account和AddressParser。避免使用Data或Info这样的类名。
不能使动词。比如:Manage、Process2.10 方法名
方法名应当是动词或者动词短语。如postPayment、deletePage或save2.11 别扮可爱
有的变量名叫haha、banana
别用eatMyShorts()表示abort()2.12 每个概念对应一个词
项目中同时出现controllers与managers,为什么不统一使用其中一种?
对于那些会用到你代码的程序员,一以贯之的命名法简直就是天降福音。2.13 别用双关语
有时可能使用add并不合适,比例insert、append。add表示完整的新添加的含义。2.14 使用解决方案领域名称
看代码的都是程序员,所以尽量用那些计算机科学术语、算法名、模式名、数学术语,
依据问题所涉领域来命名不算是聪明的做法。2.15 使用源自所涉问题领域的名称
如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称吧。
至少,负责维护代码的程序员就能去请教领域专家了。2.16 添加有意义的语境
可以把相关的变量放到一个类中,使用这个类来表明语境。2.17 不要添加没用的语境
名字中带有项目的缩写,这样完全没有必要。比如有一个名为“加油站豪华版”(Gas Station Deluxe)的项目,
在其中给每个类添加GSD前缀就不是什么好策略。2.18 最后的话
取好名字最难的地方在于需要良好的描述技巧和共有文化背景。
- 详细可以参考[提取码:suyi](https://pan.baidu.com/s/1ppgT950YT4YUKd3x6fZNFg%29)
变量
- 变量的概念
- 内存中的一个存储区域
- 该区域的数据可以在同一类型范围内不断变化
- 变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值 - 变量的作用
- 用于在内存中保存数据 - 使用变量注意
- Java中每个变量必须先声明,后使用
- 使用变量名来访问这块区域的数据
- 变量的作用域:其定义所在的一对{ }内
- 变量只有在其作用域内才有效
- 同一个作用域内,不能定义重名的变量 - 声明变量
- 语法:<数据类型> <变量名称> - 变量的赋值
- 语法:<变量名称> = <值> - 声明和赋值变量
- <数据类型><变量名>= <初始化值> - 变量的分类-按数据类型划分
很久之前做的笔记,顺利稍微有点乱
package world;
/*
* 标识符的使用
* 1.标识符:凡是自己可以命名的地方都叫标识符
* 比如:类名、变量名、方法名、接口名、包名
*
* 2.标识符的命名规则: --> 如果不遵守以下规则,编译不通过!
* 由26个英文字母大小写,0—9,_或$组成
* 数字不可以开头
* 不可以使用关键字和保留字,但能包含关键字和保留字
* Java中严格区分大小写,长度无限制
* 标识符不能包含空格
*
* 3.Java的名称命名规范--> 如果不遵守以下规则,编译通过!
* Java中的名称命名规范:
* 包名:多单词组成时所有字母都小写:xxxyyyzzz
* 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
* 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
* 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
*
* 4.
* 注意1:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
* 注意2:java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。
*/
public class IdentifierTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int myNumber = 10;
System.out.println(myNumber);
}
}
class Hello_${
}
//class 1hello{
//}
class static1 {
}
class Static{
}
package world;
/*
* 变量的使用
* 1.Java定义变量的格式:数据类型 变量名 = 变量值;
*
* 2.说明:
* 变量必须先声明,后使用
* 变量都定义在其作用域内,在作用域内,它是有效的。换句话说,出了作用域,就失效了
* 同一个作用域,不能同时声明两个同名的变量
*/
public class VariableTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 变量的定义
int myAge = 20;
// 变量的使用
System.out.println(myAge);
// 编译错误:使用myNumber之前并未定义myNumber
// System.out.println(myNumber);
// 不可以在同一个作用域内定义同名的变量
// int myAge = 19;
// 变量的声明
int myNumber;
// 编译错误:使用myNumber之前并未赋值myNumber
// System.out.println(myNumber);
// 变量的赋值
myNumber = 20200;
System.out.println(myNumber);
// System.out.println(method);
}
public void method() {
int myClass = 1;
}
}
package world;
/*
* 基本数据类型之间的运算规则
* 前提:这里只讨论7种基本数据类型变量间的运算。不包含Boolean类型的。
*
* 1.自动类型提升:
* 结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
* byte、char、short ==> int ==> long ==> float ==> double
* 特别:当byte、char、short三种类型的变量做运算时,结果为int型
*
*
* 2.强制类型转换
*
*
* 说明:此时的容器大小指的是,表示数的范围的大和小,比如float容量要大于long的容量
*/
public class VariableTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte b1 = 2;
int i1 = 12;
//编译不通过
//byte b2 = b1 + i1;
int i2 = b1 + i1;
long l1 = b1 + i1;
System.out.println(i2);
System.out.println(l1);
float f = b1 + i1;
System.out.println(f);
short s1 =12;
double d1 = s1;
System.out.println(d1);
//****************************************
char c1 = 'a';
int i3 = 1;
int i4 = i3 + c1;
System.out.println(i4);
short s2 =10;
// short s3 = c1 + s2;
}
}
package world;
/*
* 强制类型转换,可能导致精度损失
*/
public class VariableTest3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double d1 = 12.3;
//案例1
int i1 = (int)d1; //截断操作
System.out.println(i1);
//没有损失精度
long l1 = 123;
short s2 = (short)d1;
//案例2
int i2 = 128;
byte b = (byte)i2;
System.out.println(b);
}
}
package world;
public class Variable4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.编码情况
long l = 123123;
System.out.println(l);
//编译失败:过大的整数
// long l1 = 12345678987654321;
// 编译失败
// float f1 = 12.3;
//2.编译情况
//整型变量,默认类型int型
//浮点型变量,默认类型为double型
byte b = 12;
//byte b1 = b + 1;//编译失败
//float f1 = b + 12.3; //编译失败
}
}
package world;
/*
* 计算机中不同进制的不同说明
* 所有数字在计算机底层都以二进制形式存在。
*
* 对于整数,有四种表示方式:
* 二进制(binary):0,1 ,满2进1.以0b或0B开头。
* 十进制(decimal):0-9 ,满10进1。
* 八进制(octal):0-7 ,满8进1. 以数字0开头表示。
* 十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
* 如:0x21AF +1= 0X21B0
*/
public class BinaryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1 = 0b110;
int num2 = 110;
int num3 = 0127;
int num4 = 0x110A;
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
}
}
package world;
public class yanghui {
public static void main(String[] args) {
int[][] arr=new int[10][10];
for(int i=0;i<arr.length; i++) {
for(int j=0;j<=i;j++) {
if(j==0||j==i) {
arr[i][j]=1;
}else {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
- 了解:ASCII码
- 在计算机内部,所有数据都使用二进制表示。每一个二进制位(bit)有0 和1 两种状态,因此8 个二进制位就可以组合出256 种状态,这被称为一个字节(byte)。一个字节一共可以用来表示256 种不同的状态,每一个状态对应一个符号,就是256 个符号,从0000000 到11111111。
- ASCII码:上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
- 缺点:不能表示所有字符。;相同的编码表示的字符不一样:比如,130在法语编码中代表了é,在希伯来语编码中却代表(ג)了字母Gimel - 了解:Unicode编码
- 乱码:世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。
- Unicode:一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,使用Unicode 没有乱码的问题。
- Unicode 的缺点:Unicode 只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储:无法区别Unicode 和ASCII:计算机无法区分三个字节表示一个符号还是分别表示三个符号。另外,我们知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费。 - 了解:UTF-8
- UTF-8 是在互联网上使用最广的一种Unicode 的实现方式。
- UTF-8 是一种变长的编码方式。它可以使用1-6 个字节表示一个符号,根据不同的符号而变化字节长度。
- UTF-8的编码规则:对于单字节的UTF-8编码,该字节的最高位为0,其余7位用来对字符进行编码(等同于ASCII码);对于多字节的UTF-8编码,如果编码包含n 个字节,那么第一个字节的前n 位为1,第一个字节的第n+1 位为0,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10",其余6位用来对字符进行编码。
练习题
标识符的命名规则需要注意那几点?
- 1.定义合法标识符规则
- 由26个英文字母大小写,0-9 ,_或$ 组成
- 数字不可以开头
- 不可以使用关键字和保留字,但能包含关键字和保留字
- Java中严格区分大小写,长度无限制
- 标识符不能包含空格
- 2.Java中名称命名规范
- 包名:多单词组成时所有字母都小写:xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
基本数据类型有哪几类?包含String吗?
写出基本数据类型自动转化的流程图
整型默认的是什么类型,浮点型(实数型)默认的是什么类型?
对于包名,类名接口名,变量名和函数名,常量名我们习惯如何格式来命名?
定义一个变量需要注意什么?
强制类型转化可能出现的问题
char型变量中能不能存贮一个中文汉字?为什么?
注明:这些笔记主要根据B站学习视频所写,非自己撰写哈。