java 数据类型和变量
基础
因为是记笔记,这里只说一下和c++不同的地方。
定义及使用的方式和c++基本一致,就是有些名字改了而已。
类变量自动初始化,boolean初始化为false,其他初始化为0。但是普通的变量还有自己初始化。这里和c++不同的是如果没有初始化会报错。当然,如果一直没有使用的话不初始化也不会报错。
boolean 就是c++中的bool型。但是有一点不同,这里只能赋true or false,赋一个整数变成bool型是不可以的。但是无语的是底层实现其实还是非零是true,零是false。也就是说,在java中,int i = 1; if(i)的行为是不被允许的,因为整型不可以变成boolean型。
byte 一个字节,和char不同,这个是整型的。当然,java中也有char
在java中,如果数学表达式都是整数,则返回值只能是int或long型。如果把返回值赋给byte型,要进行强制类型转换。强制类型转换例:byte a = (byte)(1+1);
可以用下划线分隔,例如:int a = 10_000_000;实际上就是1000万,这样可以增加可读性。
此外,可以在后面加尾标表示类型。例如 l是long型,f是float,D是double。S是short,C表示char。例如: 100L。
小数没有后缀默认是double型
变量的赋值
- 如果int型直接赋给byte,short或char型的时候,如果在数据范围内,可以直接赋值,如果超出数据范围,必须要进行强制类型转换,而且是显式的,不然会报错。超出部分直接截断,没超出的再按对应编码方式解释。
byte b = 129;//错
byte b = (byte)129;//对
- 浮点型赋给整型必须要进行强制类型转换,而整型给浮点型不要
- double给float要强制类型转换,而float给double不要
java语言编码
java采用UCS-2编码,字符占两个字节,把字符看成无符号整数对待。一般来说不用记字符的编码,但是像一些特殊的例如'
如果直接char c = ‘’’就会出错。所以可以加反斜线进行转义。char c = ‘\’’
引用类型
引用可分为类引用,接口引用,数组引用。
类引用引用类的实例,接口引用引用接口的实例,数组引用引用数组的实例(数组页看成对象)。无论是哪种,都是引用一个对象
如果没有引用一个实例,可以赋值成null,例如:
Doll a = null;
Doll a = new Doll(“beibei”);
用new关键字可以创建一个对象,它做了下面的事:
- 为对象分配空间,并将变量初始化
- 调用构造方法
- 返回对象引用
实例变量和静态变量和静态函数
类的成员变量有两种,一种是static修饰的变量,叫做类变量,或静态变量。一种是普通的实例变量。
静态变量就是归所有实例所共享的。而普通变量就是每一个实例所独有的。
静态变量储存在方法区,而普通变量存放在堆区。想到java类方法的访问过程就可以知道方法区是存放一些共有的东西,例如方法的二进制代码。每个类使用方法时直接调用就可以了。
静态函数有几个特点:
如果不是类中的静态函数,那么只能在当前文件中使用,相当于权限是private。
如果是类中的静态函数,只能使用静态变量,也不能调用类中的非静态成员函数。
this
java中也有this指针,也是指向当前对象,但是使用的是点操作符而不是箭头。使用上与c++大致相同,
例: owner.setdog(this)//this代表当前dog的对象
参数传递
如果传递的是基本数据类型,那么就传递参数的值(值传递?)。如果是对象或者数组,那么就是引用传递。注意数组不是指针传递了,因为java中好像没有指针的概念。所以这里数组应该也可以作为返回值(纯推测,还没看到)。