Java基础(二)

148 阅读7分钟

0x01 变量

变量是指在程序运行期间可以发生改变的值
Java语言是强类型语言,强类型语言包含以下两方面的含义

  1. 所有的变量必须先声明,后赋值
  2. 指定类型的变量只能接受与之匹配的值

1.1 声明变量

在Java中,用户可以通过数据类型和标识符来声明变量,格式如下

数据类型 变量名;
数据类型 变量名 = 变量值;

1.1.1 注意事项:

  1. 数据类型可以是基本数据类型,也可以是引用数据类型
  2. 变量名需要符合标识符的使用规则
  3. 变量值需要保持和数据类型一致的类型

1.1.2 变量标识符的命名规则

  1. 首字母必须是字母,下划线和美元符号
  2. 标识符由数组,字母,下划线,美元符号等组成
  3. 不能把关键字作为标识符
  4. 标识符没有长度限制
  5. 标识符区分大小写

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保存到文件