0x01 变量
变量是指在程序运行期间可以发生改变的值
Java语言是强类型语言,强类型语言包含以下两方面的含义
- 所有的变量必须先声明,后赋值
- 指定类型的变量只能接受与之匹配的值
1.1 声明变量
在Java中,用户可以通过数据类型和标识符来声明变量,格式如下
数据类型 变量名;
数据类型 变量名 = 变量值;
1.1.1 注意事项:
- 数据类型可以是基本数据类型,也可以是引用数据类型
- 变量名需要符合标识符的使用规则
- 变量值需要保持和数据类型一致的类型
1.1.2 变量标识符的命名规则
- 首字母必须是字母,下划线和美元符号
- 标识符由数组,字母,下划线,美元符号等组成
- 不能把关键字作为标识符
- 标识符没有长度限制
- 标识符区分大小写
1.2 变量赋值
先明白两个含义
(1)初始化:第一次给变量赋值
(2)初始方式:
- 声明时直接赋值
- 先声明,后赋值
实例
public class Demo{
public static void main(String[] args){
// 声明时直接赋值
int age = 18;
String = name = "老六";
// 先声明,后赋值
int age;
age = 18;
String name;
name = "老六";
}
}
(3)特殊写法:多个同类型的变量同时定义或者初始化,但是多个变量之间要用逗号分开。不建议这种方法
代码演示
public class Demo{
public static void main(String[] args){
// 声明一个名为age的变量
int age;
// 初始化
age = 18;
// 声明一个名为name的变量,并赋值为:老六
String name = "老六";
// 同时声明多个同类型的变量
int age,num,total;
age = 18;
num = 100;
total = 122;
// 访问变量
System.out.println(Age);
System.out.println(num);
System.out.println(total);
}
}
1.3 变量的作用域
变量的作用域规定了所能使用的范围。
只有在作用域范围内才能被使用
根据变量声明地点的不同,变量的作用域也不同
-
根据作用域的不同,一般将变量分为不同的类型:成员变量和局部变量
成员变量
在Java中,成员变量又分为两种,分别是:
(1)全局变量也叫实例变量
(2)静态变量也叫类变量
定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类
全局变量(实例变量)
修饰:没有static修饰
访问方式:对象名.变量名
生命周期:只要对象被当作引用,实例变量就将存在
静态变量(类变量)
修饰:用static修饰
访问方式:类名.变量名、对象名.变量名
生命周期:其声明周期取决于类的声明周期,类被垃圾回收机制彻底回收才会被销毁
代码演示
public class GlobalVariable{
// 声明一个全局变量
int age = 18;
// 声明一个静态变量
static String name = "老六";
public static void main(String[] args){
// 访问全局变量:对象.变量名
// 创建一个对象
GlobalVariable Glo = new GlobalVariable();
// 打印全局变量
System.out.println(Glo.age); // 18
// 访问静态变量:类名.变量名
System.out.println(GlobalVariable.name); // 老六
// 访问静态变量:对象名.变量名
System.out.println(Glo.name); // 老六
}
}
局部变量
局部变量的作用范围是部分,不是类的全部
部分是指:
(1)变量作为方法的参数,其作用在整个方法内部
(2)变量可以在方法的内部定义,其作用是从被定义的代码就开始,一直到方法的结束
(3)变量可以定义在代码块中,其作用是从被定义的代码开始,一直到代码块的结束
代码演示
public class LocalVariable{
public static void main(String[] args){
// 创建当前类的对象
LocalVariable lv = new LocalVariable();
// 使用对象名打点调用sumOne
lv.sumOne();
// 通过类名打点调用sumOne
LocalVariable.sumOne();
}
// 变量作为方法的参数,num1和num2的作用在sum方法内部
public static void sum(int num1, int num2){
// 给变量赋值
num1 = 1;
num2 = 2;
}
// 变量可以在方法的内部定义
public static void sumOne(){
int num1 = 1;
int num2 = 2;
System.out.println(num1);
System.out.println(num2);
}
// 变量可以定义在代码块中
// 代码块是属于对象的,在创建对象时执行
{
int num1 = 10;
int num2 = 20;
System.out.println(num1);
System.out.println(num2);
}
}
0x02 字符集
ASCII编码
(1)位:计算机存储信息的最小单位,称之为“位”,音译比特,二进制的一个0或者一个1叫一位
(2)字节:是一种计量单位,表示数据量多少,他是计算机信息技术用于计算存储容量的一种计量单位,8个二进制位组成1个字节。在ASCII码中,一个标准的英文字母占一个字节,一个汉字占两个字节
(3)字符:是指计算机中使用的文字和符号,比如1、2、A,B,@、¥等等
ASCII编码全称“美国信息交换标准码”。ASCII中,一个英文字母占一个字节的空间,一个汉字占两个字节的空间。ASCII码是目前最普及的一种字符编码,它扎根于互联网,操作系统,键盘,打印机等
ASCII的标准版本于1967年第一次发布‘最后一次更新则是在1986年,迄今位置共收录了128个字符,包含了基本的拉丁字母,阿拉伯数字,标点符号,特殊符号以及一些具有控制功能的字符
ANSI编码
ANSI编码是一种对ASCII码的拓展,ANSI编码用0x000x7f(即十进制下的0127)范围的1个字节来表示1个英文字符,超出一个字节的0x80~0xFFFF范围来表示其他语言的其他字符
也就是说,ANSI码仅在前128(0-127)个ASCII码相同,之后的字符全是某个国家语言的所有字符。注意,两个字节最多可以春初的字符数目的是2的16次方,即65536个字符这对于一个语言来说,够了
还有ANSI编码其实包括很多编码:中国制定了GB2312编码,用来把中文编进去,另外日本把日文编到shift_jis里,韩国把韩文编到euc-kr里,各国有各国的标准,受制于当时的条件,不同语言之间的ANSI码之间不能互相转换,倒是在多语言混合的文本中会有混乱。
Unicode编码
为了解决不同国家ANSI编码的冲突问题,Unicode应运而生,如果全世界每一个服啊后都给予一个独一无二的编码,那么乱码的问题就睡消失,这就是Unicode,是一种所有符号的编码
Unicode标准也在不断发展,但最常使用的是两个自己接表示一个字符(如过用到非常偏僻的字符,需要4个字符)现代操作系统和大多数编程语言都直接支持Unicode,为了消除乱码,又能避免浪费的编码方式,出现了UTF-8
UTF-8编码
这是一种变长的编码方式,它可以使用1~4个字节表示一个符号,根据不同的服啊后而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码作为它的一部分,如此一来UTF-8编码也可以视为一种对ASCII码的拓展。在UTF-8一个中问字符占3个字符,从Unicode到UTF-8并不是直接对应,而是要多一些算法个规则来转换。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件