精华内容
下载资源
问答
  • 在Java中,我们需要标识代码的很多元素,包括类名、方法、字段、变量、包名等等。我们选择的那个名称就称为标识符,一个正确的标识符需要遵循以下规则: 1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,...

    1 JAVA语法基础

    1.1 标识符

    标识符可以简单的理解成一个名字。
    在Java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符,一个正确的标识符需要遵循以下规则:

    1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符
    2. 不能以数字开头。如:123name 就是不合法
    3. 标识符严格区分大小写。如: tmooc 和 tMooc 是两个不同的标识符
    4. 标识符的命名最好能反映出其作用,做到见名知意。
    5. 标识符不能是Java的关键字

    1.2 关键字

    在Java中,有一些单词被赋予了特定的意义,一共有50个关键字。
    这50个单词都是全小写,其中有两个保留字:const和goto。
    注意,关键字不能被用作标识符!
    在这里插入图片描述
    需要注意的是,除了上述的50个关键字以外,true,false,null也不可以被用作标识符~

    1.3.1 注释

    几乎所有编程语言都允许程序员在代码中输入注释
    因为编译器会忽略注释,所以注释并不会影响程序的运行结果。
    注释的真正作用是: 它可以向任何阅读代码的人描述或者解释程序的实现思路,如何使用以及其它任何相关信息, 提高代码的可读性,方便后期的维护与复用。
    Java的注释有3种:

    1. 单行注释: 注释单行内容.

    格式: 每行都以”//”开头.
    快捷方式: Ctrl+/ 添加注释,同样的快捷键,再按一次取消注释

    2. 多行注释:注释多行内容,虽然叫多行注释,也可注释单行内容.

    格式: 以” /* ”开头, 以” * / ”结束.
    快捷方式: 可以输入” /* ”之后按回车添加注释

    3. 文档注释: 一般用来注释类和方法,通过注释内容来记录类或者方法的信息.

    格式: 以” /** ”开头。 以” * / ”结尾
    快捷方式: 输入 “ /** ” 之后按回车添加注释

    1.3.2 练习:

    创建包: cn.tedu.basic
    创建类: CommentDemo.java

    package cn.tedu.basic;
    /**本类用于练习注释*/
    public class CommentDemo {
    	//我是一个单行注释
    	
    	/*
    	 * 我
    	 * 是
    	 * 一
    	 * 个
    	 * 多行注释
    	 */
    	
    	/**
    	 * 我是一个文档注释/DOC注释
    	 * 我也可以注释多行内容
    	 * 除此之外,我还可以添加一些作者/时间/版本...的信息
    	 */
    	public static void main(String[] args) {
    		System.out.println("我就是想测试下注释会不会执行~");
    	}
    }
    

    1.4 变量

    在JAVA中,我们需要记录一些数据
    但这些数据的值是不固定的,总在变,我们可以把这些数据理解为变量。
    我们通过三个元素来描述变量:变量类型 变量名以及变量值。
    定义变量的两种格式:
    格式一:声明变量时并且赋值:int age = 18;
    格式二:先声明变量:String tel ; 然后给变量赋值:tel = 119;

    注意:

    1. 变量名必须是一个有效的标识符
    2. 变量名不可以使用java关键字
    3. 变量名不能重复

    1.5 常量

    在程序运行过程中,值一直不会改变的量成为常量。(后续会进一步学习,略…)

    2 数据类型

    2.1 基本类型介绍(八种)

    变量要保存值,这个值是存在内存中的,所以就需要向内存申请存储空间
    java是一个强类型的语言
    为了方便内存管理系统根据变量类型更加合理的分配内存空间
    会把我们常见的数据,分成不同类型
    不同类型分配的内存大小是不同的,这个大小的单位就是字节Byte
    八大基本类型速查表
    拓展:常用的转换关系:
    位 bit,来自英文bit,音译为“比特”,表示二进制位。
    1 Byte = 8 Bits (1字节 = 8位)
    1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB

    2.2 练习: 输入个人信息

    创建包: cn.tedu.basic
    创建类: TestInfo.java
    需求: 在控制台打印: java架构师今年20岁,月薪100000.99,感慨java是世界上最好的语言

    package cn.tedu.basic;
    /**本类用于完成个人信息输出案例*/
    public class TestInfo {
    	//1.添加程序的入口函数main()
    	public static void main(String[] args) {
    		/**1.定义变量的规则:变量的类型  变量名  变量的值*/
    		/**2.String是字符串类型,用来保存多个字符*/
    		//2.定义变量
    		String name = "泡泡";//定义一个String变量用来保存姓名"江江"
    		int age = 16;//定义一个age变量用来保存年龄16
    		double salary = 100000.66;//定义一个变量salary用来保存工资
    		//3.我们可以通过打印语句查看变量的值
    		System.out.println(name);
    		System.out.println("java架构师"+name+",今年"+age+"岁,月薪"+salary+",感慨Java是世界上最好的语言!");
    	}
    }
    

    2.3 练习:查看基本类型的最大值与最小值

    创建包: cn.tedu.basic
    创建类: TestTypeScope.java

    package cn.tedu.basic;
    /**本类用于测试基本类型*/
    public class TestTypeScope {
    	//1.创建程序的入口函数
    	public static void main(String[] args) {
    		/**1.整形类型:byte short int long*/
    		/**2.Java给8大基本类型都提供了类型对应的“工具箱”*/
    		/**3.int类型的工具箱比较特殊,叫做:Integer*/
    		//2.定义对应类型的变量:格式:类型 名字 = 值 ;
    		byte byteMin = Byte.MIN_VALUE;
    		byte byteMax = Byte.MAX_VALUE;
    		System.out.println("byte类型的最小值为:" + byteMin);
    		System.out.println("byte类型的最大值为:" + byteMax);
    		
    		short shortMin = Short.MIN_VALUE;
    		short shortMax = Short.MAX_VALUE;
    		System.out.println("short类型的最小值为:" + shortMin);
    		System.out.println("short类型的最大值为:" + shortMax);
    		
    		int intMin = Integer.MIN_VALUE;
    		int intMax = Integer.MAX_VALUE;
    		System.out.println("int类型的最小值为:" + intMin);
    		System.out.println("int类型的最大值为:" + intMax);
    		
    		long longMin = Long.MIN_VALUE;
    		long longMax = Long.MAX_VALUE;
    		System.out.println("long类型的最小值为:" + longMin);
    		System.out.println("long类型的最大值为:" + longMax);
    		
    		/**4.浮点类型 :float double*/
    		float floatMin = Float.MIN_VALUE;
    		float floatMax = Float.MAX_VALUE;
    		System.out.println("float类型的最小值为:" + floatMin);
    		System.out.println("float类型的最大值为:" + floatMax);
    		
    		double doubleMin = Double.MIN_VALUE;
    		double doubleMax = Double.MAX_VALUE;
    		System.out.println("double类型的最小值为:"+ doubleMin);
    		System.out.println("double类型的最大值为:"+ doubleMax);
    		
    		/**5.boolean布尔类型只有两个值true与false
    		 * 虽然true和false不是关键字,但是也不可以用作标识符*/
    		boolean b1 = true;
    		boolean b2 = false;
    		
    		/**6.测试char 字符类型
    		 * 字符型的数据需要使用单引号 ' ' 来包裹
    		 * char类型可以存数字,但是会从ASCII码表查出这个数字对应的字符来打印
    		 * 128~65535这些数字,也可以保存,但是eclispe一般显示为?*/
    		char c1 = 'a';//字符型可以保存一个字母
    		char c2 = '中';//字符型还可以保存一个汉字
    		char c3 = '7';//字符型可以保存一个字符7
    		char c4 = 97;//字符型可以保存数字,但是会查ASCII,打印的是字符a
    		char c5 = 55;//字符型可以保存数字,但是会查ASCII,打印的是字符7
    		char c6 = 199;
    		System.out.println(c1);
    		System.out.println(c2);
    		System.out.println(c3);
    		System.out.println(c4);
    		System.out.println(c5);
    		System.out.println(c6);
    		
    	}
    
    
    
    }
    

    2.4 练习:求圆形的面积

    需求:求出指定半径圆的面积
    公式:圆的面积:π * r * r
    创建包: cn.tedu.basic
    创建类: TestCircleArea.java

    package cn.tedu.basic;
    
    import java.util.Scanner;
    
    /**本类用于求圆形的面积*/
    public class TestCircleArea {
    	//1.创建程序的入口函数main()
    	public static void main(String[] args) {
    		/**等号右边的值赋值给等号左边的变量来保存*/
    		//1.提示用户输入圆的半径:
    		System.out.println("请您输入要求的半径值:");
    		
    		/**变量的第二种定义方式:先定义,再赋值*/
    		//2.1定义一个变量用来保存圆的半径
    		//double r = 5.5;
    		double r ;
    		//2.2接收用户在键盘上输入的数据,并把这个数据交给r保存
    		//开启扫描(发出一个系统指令,准备接收控制台输入的数据)
    		//nextDouble()控制用户只能输入double类型的数据,否则报错
    		r = new Scanner(System.in).nextDouble();
    		
    		//根据半径值求出圆的面积
    		double circleArea = 3.14 * r * r;
    		//打印计算的结果
    		System.out.println("圆的面积是:"+circleArea);
    	}
    
    }
    

    2.5 练习:变量交换

    在这里插入图片描述
    需求: 接收用户输入的两个值:假设a=1,b=2,并将这两个变量的值进行互换
    创建包: cn.tedu.basic
    创建类: TestValueExchage.java

    package cn.tedu.basic;
    
    import java.util.Scanner;
    
    /**本类用于练习值交换案例*/
    public class TestValueExchange {
    	//1.创建程序的入口函数main
    	public static void main(String[] args) {
    		//2.提示并接受用户在控制台输入的两个整数
    		System.out.println("请输入要交换的第一个整数:");
    		int a = new Scanner(System.in).nextInt();
    		System.out.println("请输入要交换的第二个整数:");
    		int b = new Scanner(System.in).nextInt();
    		System.out.println("a的值:"+a);
    		System.out.println("b的值:"+b);
    		
    		//3.交换 a b 这两个变量保存的值
    		int t;//定义一个变量用来辅助值交换
    		t = a;//把a的值交给t来保存
    		a = b;//把b的值交给a来保存
    		b = t;//把t的值交给b来保存
    		
    		System.out.println("交换后,a的值:"+a);
    		System.out.println("交换后,b的值:"+b);
    		
    	}
    
    }
    

    2.6 引用类型

    除了基本类型以外的所有类型都是引用类型
    目前我们只遇到了String字符串类型,需要用双引号包裹
    引用类型是一个对象类型,值是什么呢?
    它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组,后面讲。。。
    (后续会进一步学习,略…)

    3 基本类型的字面值(5条)

    3.1 整数类型的字面值类型是int类型

    也就是说,我们只要写一个整数,就被认为是int类型

    int x = 99999;
    //byte y = 300;//错,300是int类型,byte存不下
    //int z = 999999999999;//错,虽然是int类型,但是超出范围
    long h = 999999999999L;//如果要定义long类型需要加后缀L
    

    3.2 浮点数类型的字面值类型是double类型

    也就是说,我们只要写一个小数,就被认为是double类型

    	double d = 3.14;
    	//float f = 3.14;//错,3.14认为自己是double类型
    	float f = 3.14F;//如果要定义float类型需要加后缀F
    	double d2 = 3D;//如果要定义的小数是整数,最好加D方便阅读
    

    3.3 byte,short,char三种比int小的整数可以用范围内的值直接赋值

    byte b1=127;//对,
    byte b2=128;//错,超出byte的范围
    char c1=97;//对,对应的是码表中的'a'
    char c2 =69999;//错,超出char的范围
    

    3.4 字面值后缀L D F

    long x =99999999999L;//字面值是int类型,需转成long类型的数据,加字面值后缀L即可
    float b = 3.0F;//3.0字面值是double类型,加后缀F会变成float类型
    double d = 3D;//3字面值是int类型,加后缀D,会变成double类型
    

    3.5 进制前缀

    0b - 标识这是2进制 ,如:0b0101
    0 - 标识这是8进制, 8进制是三位,如: 023
    0x - 标识这是16进制,如: 0x0001
    		//10进制,底数为10:10^2 10^1 10^0 =100+0+0=100
    		System.out.println(100);//默认10进制,打印100
    		//2进制,底数为2:2^2 2^1 2^0 =4+0+0=4
    		System.out.println(0b100);//2进制,打印4
    		//8进制,底数为8:8^2 8^1 8^0 =64+0+0=64
    		System.out.println(0100);//8进制,打印64
    		//16进制,底数为16:16^2 16^1 16^0 =256+0+0=256
    		System.out.println(0x100);//16进制,打印256
    

    4 基本类型的类型转换

    箭头开始的地方是小类型,箭头指向的地方是大类型
    我们此处所指的"大"和"小",指的是对应类型的取值范围,不是字节数哦
    基本类型的类型转换

    4.1 小到大(隐式转换)

    byte m = 120;
    int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
    float f = 3.2f; double d = f; -->可以执行

    4.2 大到小(显式转换)

    容量大的类型转换为容量小的类型时必须使用强制类型转换。

    int x = 999;
    byte y =(byte)x;//大转小,右面x给左面的y小类型赋值,不可以,需要强制类型转换
    1. 转换过程中可能导致溢出或损失精度
      例如:int i =128; byte b = (byte)i; //打印的结果是-128
      因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
    2. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
      例如:float f = 32.7f; int a2 =(int) f; //打印的结果是32
    3. 不能对boolean类型进行类型转换。

    4.3 口诀:

    小到大,直接转 大到小,强制转 浮变整,小数没

    低 ------------------------------------> 高

    byte,short,char→ int→ long→float→double

    5 运算规则(5条)

    5.1 计算结果的数据类型,与最大数据类型一致

    System.out.println(3/2);//1,int/int,得到的结果类型还是int
    System.out.println(3/2d);//1.5,int/double。得到的结果是double

    5.2 byte,short,char三种比int小的整数,运算时会先自动转换成int

    byte a = 1;
    byte b = 2;
    byte c = (byte)(a+b);
    //a+b会自动提升成int类型,右面得运算结果就是int大类型
    //给左面的byte小类型赋值,不可以,需要强转。

    5.3 整数运算溢出

    整数运算溢出

    整数运算,类似于一个钟表,转到最大时,再转会回到最小。
    计算:光速运行一年的长度是多少米?3亿m/s

    //溢出的现象:
    //因为做了大的整型数据的运算,会超出int取值范围。解决方法:把整数提升成long类型。
    System.out.println(300000000L * 60 * 60 * 24 * 365);

    5.4 浮点数运算不精确

    1-0.8 (这是一个现象,后续会学习解决方案)

    5.5 浮点数的特殊值

    Infinity 无穷大 3.14/0
    NaN not a number 0/0.0 或 0.0/0

    6 拓展 标识符命名风格

    1.【强制】标识符命名均不能以数字开头,而且下划线或美元符号开始,也不能以下划线或美元符号结束
    错误案例:1name / _ name / name_ / $ name / name $
    2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。
    注意,即使纯拼音命名方式也要避免采用。
    正确案例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
    错误案例:DaZheModule [打折模块] / getPingfenByName() [评分]
    3.【强制】类名使用 UpperCamelCase 风格,即第一个单词的首字母就要大写

    展开全文
  • Java 变量数据类型

    千次阅读 2016-08-26 15:05:00
    Java 变量之变量数据类型Java数据类型图: 1.基本数据类型 基本数据类型,也称内置类型,是可以在栈直接分配内存的,Java保留基本数据类型最大的原因也在此:性能。关于这一点可以参考:Java为什么需要保留基本...

    Java 变量之变量数据类型

    Java数据类型图:
    这里写图片描述

    1.基本数据类型

      基本数据类型,也称内置类型,是可以在栈直接分配内存的,Java保留基本数据类型最大的原因也在此:性能。关于这一点可以参考:Java为什么需要保留基本数据类型
      另外,要注意,Java是基于JVM的,所以,其所占字节固定,与机器平台无关,所有地方统一占用内存大小(除了boolean,以及byte/short/boolean数组的时候每个单元所占的内存是由各个JVM自己实现的)。
      总共有四类八种基本数据类型(注1):
    1).整型:全部是有符号类型。
    1.byte:1字节(8bit),高位为符号位,其余7位为数据位,范围:-2的7次方~2的7次方-1(1111,1111~0111,1111),即-128~127(下面的计算方式相同);

    注意:byte类型虽然在语义(逻辑)上是占用1字节,但实际上,JVM中是将其当做int看
    的,也就是事实上是占用了32位,4字节的,所以其运算效率和int没区别,short也一样。
    之所以要有byte/short类型,一是因为某些地方要明确使用这些范围类型,二是,
    在byte[]数组中,JVM存储的则是真的1字节,short[]2字节。(但也有的JVM其byte[]
    数组也是4字节1位)

    2.short:2字节(16bit),高位为符号位,其余15位为数据位,范围:-2的15次方~2的15次方-1,即-32768~32767;

    3.int:4字节(32bit),范围-2的31次方~2的31次方-1;Java默认的整型类型,即:

    long l = 0xfffffffffff;//0x表示这个数是16进制数,0表示8进制。
    //编译器报错,因为右边默认是int,但其超出了范围(没超出int范围的话
    //编译器会隐式将int转为long),故报错(同样的错误也会出现在float)。

    同样的还有:

    short s = 123;//(这个123也是int类型,这里,= 操作编译器能隐式转换) 
    s = s + 123;//编译器报错,那是因为s+1是int类型(编译器先将s转化为int,再+1),
    //这里,+ 操作编译器不能隐式转换(会提示失真,即精度可能会受损),正确的做法:
    s = (short)(s + 123)//注意,不是(short)s + 123。

    类型转化详见:Java 数据类型转化
    4.long:8字节(64bit),范围:-2的63次方~2的63次方-1;声明大的long方法:

    long l = 0xfffffffffffL;//即在后面加上L或l。
    //(强制转化:long l = (long)0xfffffffffff也没用)

    2).浮点型
    5.float:4字节(32bit),单精度,数据范围:(-2^128)~(-2^(-23-126))-(0)-(2^-149)~2^128。浮点数,通俗来说就是小数,但是,这是有精度要求的,即在这区间float可不是能表达任意小数的,而是在一定精度下,比如float有效位7~8位(包括整数位和小数位,有效小数位是6~7位,这里为什么是7~8(6~7),参考:Java中float/double取值范围与精度),即0.123456789后面的9JVM是不认识的(8能认识,整数位为0则不算是有效位,例如12.1234567后面的7也不认识,只有6位有效小数位(注意,看的是有效位,不是有效小数位,float有7~8位有效位)),即:

    if(0.123456781f == 0.123456789f){//注意后面加f/F,否则就是double
        System.out.println("true");
    }else{
        System.out.println("false");
    }
    //打印结果:true
    //事实上,浮点数值的比较是不能直接用==判断的,这里原因就要追究到浮点数的内存结构
    //浮点数比较可以用一个差值,但这种情况只是近似的比较
    //如果想要精确,可以使用BigDecimal
    System.out.println(Float.MIN_VALUE);//1.4E-45 = 2^-149
    //这里的“最小值”意味float能表示的最小小数,实际上float最小值等于最大值取负
    System.out.println(Float.MAX_VALUE);//3.4028235E38 = 2^128

    6.double:8字节(64bit),双精度,范围:-2^1024~(-2^(-1022-52))-0-(2^-1074)~2^1024,Java默认的浮点类型,即若后面不加f/F,默认是double类型,即:

    float f = 1.23;//编译报错,因为
    float f = 1.23f;//或float f = 1.23F;
    //默认是double,1.23(double)转成float,做隐式转换,但是double转成float是
    //取值范围大的转成取值范围小的会损失精度,因此不能转换(详见Java数据类型转换)
    //那为什么,int可以转换成byte、short,int范围更大不是?
    //前面已经说过了,byte、short实际在JVM上就是int,因此编译器是不会认为会损失精度的
    //但是int是不能转换成boolean,虽然boolean也是4字节(一般JVM),但在JVM认为这
    //两者完全是两个东西,当然不能转换(强制也不行,你不能把猫强制转换成鸟,完全两个物种),而byte、short都是整型,同int是一个类型

    3).字符型
    7.char:2字节(16bit),表示一个字符(可以是汉字),字符编码采用Unicode(说的更准确点,字符集(charset)采用UCS-2,编码(encoding)采用UTF-16),实际上就是一个16位的无符号整型,但是,要注意的是,因为随着发展,char所能代表的字符个数(UCS-2字符集)被限定死了,所以并不推荐使用。(更多内容,以及关于Unicode、UTF8/16参考:Unicode、UTF8以及Java char。)

    char c = 3+5;//正确,char是无符号整型,但不能这样
    int a1 = 3;int a2 = 5;char c0 = a1+a2;//这里需要强制转换才行
    char c1 = -3;//编译错误,char不能表示负数,即使
    char c2 = (char)-3;//编译正确,但无意义(乱码)
    char c3 = '3';//正确,输出字符3
    char c4 = "3";//编译错误,双引号,表示的是字符串
    char c5 = '65';//编译错误,这里65是两个字符

    4).布尔型
    8.boolean:逻辑上:1bit,但是实际上,boolean并没有具体规定,完全是看各个JVM实现,不过《Java虚拟机规范》给出了4个字节(同byte解释)和boolean数组一个字节的定义。

    注1:
    (1).这种分法是一种比较流行的分法,事实上应该为两种:数值类型与布尔型。数值类型分为整型和浮点型。整型包括:byte、short、int、long、char;浮点型:float、double;布尔型boolean。之所以将char认为是整型是因为char在JVM就是以无符号整型存在的。
    (2).事实上Java中除去这8种以及对象类型,还有一种比较特殊的类型存在,那就是Void。java.lang.Void,是一个占位符类,不可实例化,保存着Java关键字void的Class对象。为什么说它特殊呢?明明是一个类,难道不是对象类型?那是因为void.class.isPrimitive()(这个方法是用来判断一个Class对象是否是基本类型的)返回的是true,所以Void也算是基本类型的一个了(错了),只不过它比较特殊,不能算是一种数据,只是一种象征。
    20160921 改:上面弄错了,把Void和void两个混为一体了,事实上,可以简单的把这两者的关系看成类似包装类和基本类型的关系,像Integer和int的关系,java.lang.Void是一个不可实例化的占位符类来保存一个引用代表了Java关键字void的Class对象:

    public static final Class<Void> TYPE = Class.getPrimitiveClass("void");

    而Integer也有类似的语句:

    public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");

    区别只是,Void仅仅是为void服务,即所谓的占位符类,不做他用。所以Void类只是一个普通类,而void则可以认作为如同int一样的基本类型。

    2.引用数据类型

      也称对象变量类型,复合数据类型,包含类、接口、数组(除了基本类型外,就是引用类型)。引用类型与基本类型最大的区别在于:

    int a = 5;//这里的a是对象(严格来说不算是对象,只是个符号标识),5是数值
    Integer a = 5;//这里的a是一个引用,5才是一个对象,更形象常见的是:
    Object o = new Object();//o是引用(栈中),new Object()是对象(堆中)
    //第二行代码中,5被自动包装成Integer对象

      这里的引用有点像C/C ++中的指针,但是同指针不同的是,你不能通过改变它的值从而去改变它所指向的值。即

    ClassA p = new ClassA();//C++中,这个时候是可以这样操作的:
    p = p + 1;//向前移动一个单元,Java则不能
    //这种操作,其实是对内存直接的操作,很显然,Java是不允许程序员做这种操作的

      其实质就是,Java的引用不支持对内存直接操作,而指针则可以,所以,Java用起来更安全,但不够灵活,而指针,自由度大,但同时,要更加小心因为指针操作不当而引起的各种内存问题。在Java中,任何对象都需要通过引用才能访问到,没有引用指向的对象被视为垃圾对象,将会被回收。
      引用,其实质同指针一样(可以理解为受限制的指针),存放的是一个地址,至于是实例对象的地址,还是一个指向句柄池的地址(这里可以参考:(3) Java内存结构),完全是看各个JVM的实现了。
      Java中的枚举类型,都是Enum类的子类,算是类中的一种,也是引用类型。
      引用类型又称为对象变量类型,是相对于基本数据类型来说的(基本数据类型不是对象),而又被称为复合数据类型,可以这样理解,引用类型的数据最终都是由基本数据类型构成的。而像接口,接口是不能实例化的,最终的实现还是由类实现的;数组在JVM中的实现也是通过类实现的,每个类型的一维数组,二维数组……都是一个类,只是这是一个特殊的类,它的对象头有别于一般对象的对象头(最主要的就是,数组对象头有对象长度)。
      另外,关于Java引用可以参考:Java中的引用

    展开全文
  • MySQL常见数据类型

    千次阅读 2018-09-27 08:36:42
    数据类型是列、存储过程的参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。  有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等…; MySQL常见数据...

    MySQL的常见数据类型

    在这里插入图片描述

    数据类型是什么?

    数据类型是列、存储过程的参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
      有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等…;

    MySQL常见的数据类型

    大致可以分为三类:数值、日期/时间、字符串类型
    1.数值类型
    分为严格数值类型和近似数值类型和浮点型,严格数值类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)
    在这里插入图片描述
    在这里插入图片描述
    2.日期和时间类型
    表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

    每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

    TIMESTAMP类型有专有的自动更新特性,将在后面描述
      在这里插入图片描述
      3.字符串类型
      字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
      CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
      首先明确,char的长度是不可变的,varchar的长度是可变的;比如现在定义一个char[10]和varchar[10],现在往里边存储’csdn’四个字符,此时char中存储的是’csdn’四个字符外还有六个空格,而varchar则是存储是’csdn’四个字符,这里注意要在char类型中取数据’csdn’的时候,要注意用trim函数去掉末尾的空格,而varchar是不需要的;
      尽管这样吧,char的存储速度还是比varchar快,因为其长度固定,方便程序的存储于查找,这里可以理解成以空间换时间吧(个人感觉);因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的;
      char类型对英文的存储的ASCII码占一个字节,汉子占两个字节;而varchar则是英文和汉字都是两个字节;
      两者的存储数据都非unicode的字符数据;
      BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

    有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。
      在这里插入图片描述
      在这里插入图片描述

    总结

    本文大体介绍了MySQL的数据类型,以及各数据类型的含义,如果不是专业的DBA,应该了解这些就足以了;

    在这里插入图片描述
    /*************************************************************************
    /*************************************************************************
    此文章版权方是个人,目的是为自己记录学习历程的同时为大家提供一些参考;如果有不正确的地方,欢迎大家提出!

    /*************************************************************************
    /*************************************************************************

    展开全文
  • day02 变量数据类型

    千次阅读 2020-07-23 15:12:55
    1 什么是注释?注释分为几种?注释有什么作用? 2 什么是关键字?有什么特点? 3 什么是标识符?由哪些部分组成?常见的命名规则有哪些?...5 计算出十进制46对应的二进制,八进制,十六进制的值。...8 数据类型转换

    1 什么是注释?注释分为几种?注释有什么作用?

    注释就是对代码解释说明
    注释分为3种

    • // 单行注释
    • /* */ 多行注释
    • /** */ 文档注释
      注释要让自己和别人能够更加轻松理解代码,不影响程序编译和运行

    2 什么是关键字?有什么特点?

    《保留字》
    关键字是已经预先定义好的单词,具有某种特殊含义

    特点 全部小写

    3 什么是标识符?由哪些部分组成?常见的命名规则有哪些?

    标识符是给类,接口,方法,变量等起名字的字符序列
    组成

    • 英文大小写字母
    • 数字
    • $和_

    命名规则《见名知意思》
    A:包 全部小写
    单级包 小写
    举例 liuyi,com
    多级包 小写,并用.隔开
    举例 cn.itcast,com.baidu
    B:类或者接口
    一个单词 首字母大写
    举例 Student,Demo
    多个单词 每个单词首字母大写
    举例 HelloWorld,StudentName
    C:方法或者变量
    一个单词 首字母小写
    举例 name,main
    多个单词 从第二个单词开始,每个单词首字母大写
    举例 studentAge,showAllNames()
    D:常量
    全部大写
    一个单词 大写
    举例 PI
    多个单词 大写,并用_隔开
    举例 STUDENT_MAX_AGE

    4 什么是常量?常量的分类?字面值常量表现形式有哪些?

    常量就是在程序执行过程中值不改变的量

    分类

    • 字面值常量
    • 自定义常量 ???

    字面值常量

    • 字符串常量 “hello”
    • 整数常量 12,23
    • 小数常量 12.345
    • 字符常量 ‘a’,‘A’,‘0’
    • 布尔常量 true,false
    • 空常量 null

    5 计算出十进制46对应的二进制,八进制,十六进制的值。

    至于进制的内容今天在练习一次,以后就可以不用练习了。
    后面能听懂就OK了。不用浪费太多时间。
    (可用计算器验证你算的是否正确)

    101110
    56
    2e

    6 什么是变量?变量的定义格式?要使用变量需要注意什么?

    常量就是在程序执行过程中值可以改变的量

    • 数据类型 变量名 = 初始化值;

    • 数据类型 变量名;

      变量名 = 初始化值;

    变量使用的三个步骤是不可以改变的

    1. 定义 在内存中申请存储空间
    2. 赋值 将申请的存储空间填充必要的内容
    3. 使用 读取存储内容,或者将存储空间用其它内容替换

    7 Java中的数据类型分几类?基本数据类型有哪些?

    Java中的数据类型分2类

    • 基本数据类型
    • 引用数据类型

    基本数据类型《4类8种》
    整数 byte short int long
    浮点数 float double
    字符 char
    布尔 boolean

    public class Variable {
    public static void main(String[] args) {
        System.out.println("基本数据类型的变量")
        // 定义字节型变量
        byte b = 100;
        System.out.println("字节型变量 " + b);
        // 定义短整型变量
        short s = 1000;
        System.out.println("短整型变量 " + s);
        // 定义整型变量
        int i = 123456;
        System.out.println("整型变量 " + i);
        // 定义长整型变量
        long l = 12345678900L; // 数据后加L
        System.out.println("长整型变量 " + l);
        // 定义单精度浮点型变量
        float f = 5.5F; // 数据后加F
        System.out.println("单精度浮点型变量 " + f);
        // 定义双精度浮点型变量
        double d = 8.5;
        System.out.println("双精度浮点型变量 " + d);
    
        // 定义布尔型变量
        boolean bool = false;
        System.out.println("布尔型变量 " + bool);
        // 定义字符型变量
        char c = 'A';
        System.out.println("字符型变量 " + c);
        }
    }
    

    8 数据类型转换

    隐式转换 
    - 从小到大
    - byte,short,char -- int -- long -- float -- double
    - byte,short,char之间不相互转换,直接转成int类型参与运算
    强制转换 
    - 从大到小
    - 可能会有精度的损失,一般不建议这样使用
    - 格式 
        目标数据类型 变量名 = (目标数据类型) (被转换的数据)
    

    面试题
    第一题

    byte b1=3,b2=4,b;
    b=b1+b2;
    b=3+4;
    
    哪句是编译失败的呢?为什么呢?
    b=b1+b2; 编译失败,[错误: 不兼容的类型: 从int转换到byte可能会有损失]
    b1,b2是变量类型 127+127可能会导致溢出
    

    在这里插入图片描述

    在这里插入图片描述
    第二题

    byte  by = 130;
    
    有没有问题?有问题如何解决?结果是多少呢?
    有 byte by = (byte)130; -126
    

    9 练习打字(每天十分钟,即使休息的时候,也建议练习)

    展开全文
  • IDA设置不常见变量类型

    千次阅读 2018-10-05 17:12:30
    平时使用键盘上的字母"...键可以方便的设置栈变量、全局变量类型为:byte、word、dword,但是发现除了这3中类型,其他类型变量不知道怎么设置。 苦思冥想终于找到设置类型的按钮了,如下图:  ...
  • JavaScript基本概念之变量数据类型

    千次阅读 2016-09-30 16:44:15
    数据类型 基本数据类型 Undefined类型 Null类型 Number类型 Number类型的NaN 字符串类型 引用类型 Object类型 Array类型 Date类型 RegExp类型 Function类型 基本包装类型变量变量定义ECMAScript的变量是松散类型,也...
  • Python数据类型变量,进制,常见函数 通过type()函数查看数据的类型 print ( 10 )----------#10 print ( type ( 10 ) )----------#<class ‘int’> 整数 print(12.32)----------#12.32 print ( type ( 12.32...
  • thrift常见数据类型

    万次阅读 2017-04-12 16:12:16
    要编写Thrift定义文件,肯定要熟悉Thrift常见数据类型: 1.基本类型(括号内为对应的Java类型): bool(boolean): 布尔类型(TRUE or FALSE) byte(byte): 8位带符号整数 i16(short): 16位带符号整数 i...
  • MySQL常见数据类型(八)

    千次阅读 2017-03-11 10:17:00
     数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。  有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...   二、MYSQL...
  • JavaScript详解(3.变量数据类型

    千次阅读 2020-01-18 18:57:30
    文章目录一,基本数据类型二,变量的声明三,相关数据类型说明 一,基本数据类型 undefined未定义 (声明了变量但从未赋值 ) null空 (赋值为null) boolean布尔型 (true,false) 字符串string (单引号、双引号...
  • 10-变量数据类型

    千次阅读 2012-12-31 21:07:00
    前几章参考: 1-引言 2-Objective-C 编程 ...枚举数据类型可以为只存储一些值的链表这种数据类型定义名称。Objective-C语言的typedef语句允许你为内置或派生的数据类型指定自己的名称。 对象的初
  • 变量数据类型 java基础03

    万次阅读 2020-11-30 08:36:00
    5.1 变量概述 在程序执行的过程中,在某个范围内其值可以发生改变的量,理解:如同数学中的未知数 5.2 变量定义格式 数据类型 变量名 = 初始化值; 注意:格式是固定的,记住格式,以不变应万变 5.3 变量的组成规则 ...
  • SQL Server常见数据类型介绍

    万次阅读 多人点赞 2018-10-25 14:49:19
    数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅 Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串。最多 8,000 个...
  • 变量存储类型

    千次阅读 2018-08-01 15:40:47
    一、 首先来说说数据的类型,所有的数据都有两种类型,一是常见数据类型,如int,float等,一种便是今天的重头戏,存储类型。总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量...
  • 在Java中常见数据类型有哪些?

    千次阅读 2020-04-21 22:12:14
    在java中常见数据类型有哪些 ? 看图 看图 看图 重要的事情说三遍 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 内置数据类型 类型名称 字节、位数 ...
  • 八种数据类型、三种变量类型、显式转换与隐式转换、两种修饰符、六种表达式、数组使用、Math类介绍、分支结构和循环结构、关键字、JVM、JDK与JRE

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 439,215
精华内容 175,686
关键字:

常见的变量数据类型