初始Java(Java语言
引言
经过C语言学习我们简单了解了程序语言,那么C语言的学习告一段落,但是C语言提高需要我们不断的练习,那么接下来我们要进行Java语言的学习了。
第一个Java语言程序
public class HelloWorld{
public static void main(String[]args){
System.out.println("hello world");
}
}
我们可以发现Java的main方法比C语言的main函数要复杂的多,那么我们介绍一下第一个程序:
public:访问修饰限定符(后期会进一步认识)。
class:关键字。用来定义一个类。(用C语言来形容,可以理解为类型)
HelloWorld:类的名称。
public static void main():就是main()方法(C语言中叫做main()函数,Java语言中函数叫做方法)
String []args:是main方法的形式参数,args是数组需要注意的是,数组跟C语言中的数组是不一样的,C语言中的数组是arr[ ],而在Java语言中的数组是[ ]arr。
System.out.println(“hello world”):就相当于是C语言中函数的printf()函数。
数据类型和变量
整型变量——int
整型变量对于Java语言来说,有几点跟C语言是不一样的。
1、在Java语言中,int字节都是4个字节,不管是什么平台,什么操作系统,因此说明Java语言可移植性高。
2、Java中的int,没有所谓的无符号整型,统一都是有符号的,所以没有unsighed int,所以对于int而言,取值范围是:-2147483648(-231)~2147483647(231-1)
3、变量的命名和C语言命名时一样的,所以我们关注一下就行,不能用数字开头命名,用平常的英文单词就行,出现多个就在后面加上数字,或者下划线等。
4、变量的定义时不能不进行初始化的,如果不进行初始化,编译器就会报错。
长整型——long
1、long定义的变量有8个字节,64位,取值为(-263~263-1).
2、在Java中不存在long long类型的。
单精度浮点类型——float
1、单精度浮点数占4个字节,32位。
2、注意在定义初始化变量为单精度浮点数时要注意数字后加上f,例子:
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);
这个跟C语言不一样,在C语言中,如果不加f,会报警告,类型不兼容,但是在Java中会报错,无法通过运行。
双精度浮点类型——double
浮点类型的跟C语言极其相似。
1、double类型的变量占8个字节,64位。
2、同样在进行除法运算需要产生小数时需要定义浮点类型,否则按整型处理。例子:
int a = 1;
int b = 2;
System.out.println(a / b);
运算结果为0;
3、Java 的 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差。
字符类型——char
字符类型跟C语言就不一样了。
在C语言中字符类型占1个字节,Java不一样。
1、字符类型在Java中占2个字节,16位。
2、因为占两个字节,因此Java是可以打印汉字的。
char ch = '呵';
System.out.println(ch);
汉字在字节中是占两个字节。
3、同样如果字符定义一个变量,将整型赋值给改变量,打印出来仍然是整型对应的ASCLL码值。
字节类型变量——byte
这个是C语言中没有的类似于C语言中的char类型。
1、byte占1个字节,8位。
2、字节类型表示的也是整数. 只占一个字节, 表示范围较小 ( -128 -> +127 )
3、字节类型和字符类型互不相干。
短整型变量——short
1、short类型是2个字节,16位。取值范围(-216~216-1)
2、 这个表示范围比较小, 一般不推荐使用。
布尔类型变量——boolean
1、boolean 类型的变量只有两种取值, true 表示真, false 表示假。
2、Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法。
3、boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定。
字符串类型变量
字符串类型变量是C语言没有的变量。
我们看一个例子:
public class TestDemo {
public static void main(String[] args) {
String str = "hello";
System.out.println(str);
}
}
1、Java 使用 双引号 + 若干字符 的方式表示字符串字面值。
2、 和上面的类型不同, String 不是基本类型, 而是引用类型。
3、字符串中的一些特定的不太方便直接表示的字符需要进行转义。
转义字符
转义字符有很多, 其中几个比较常见的如下:
转义字符 | 解释 |
---|---|
\n | 换行 |
\t | 水平制表符 |
\’ | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
变量的作用域
关于变量的作用域是跟C语言一样的,也就是该变量能生效的范围, 一般是变量定义所在的代码块(大括号)。我们来看例子:
class Test {
public static void main(String[] args) {
{
int x = 10;
System.out.println(x); // 编译通过;
}
System.out.println(x); // 编译失败, 找不到变量 x.
}
}
变量的命名规则
硬性指标:
- 一个变量名只能包含数字, 字母, 下划线和美元符号($)。
- 数字不能开头。
- 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量。
软性指标: - 变量命名要具有描述性, 见名知意。
- 变量名不宜使用拼音(但是不绝对)。
- 变量名的词性推荐使用名词。
- 变量命名推荐 小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写。
常量
变量是在程序运行时,可以改变的量;而常量是在编译的时候,就已经确定的值,而常量分为两种:1.字面常量;2.final修饰的变量(相当于C语言中的const)
字面常量
字面常量 | 解释 |
---|---|
10 | int 字面值常量(十进制) |
010 | int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8 |
0x10 | int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16 |
10L | long 字面值常量. 也可以写作 10l (小写的L) |
1.0 | double 字面值常量. 也可以写作 1.0d 或者 1.0D |
1.5e2 | double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2 |
1.0F | float 字面值常量, 也可以写作 1.0F |
true | float 字面值常量, 也可以写作 1.0F |
‘a’ | char 字面值常量, 单引号中只能有一个字符 |
“abc” | String 字面值常量, 双引号中可以有多个字符 |
理解类型转化
int 和 long/double 相互赋值
我们看一个例子:
public static void main(String[] args) {
int a = 10;
long b = a;
System.out.println(b);//正确
long l = 12;
int c = l;
System.out.println(c);//报错
}
在这个例子中,a是可以赋值给b的,因为b是long类型,而a是int类型,所以不会报错,但是l不能赋值给c,原因正好相反,但是可以进行强制类型的转化。所以正确是这样的。
public static void main(String[] args) {
long l = 12;
int c = (int)l;
System.out.println(c);
}
结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行。
int 和 boolean 相互赋值
我们看个例子:
public static void main(String[] args) {
int a = 10;
boolean b = (boolean) a;
boolean c = true;
int d = (int) c;//报错
}
int和boolean是无法互相赋值的,强制类型转化也不行。
结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值。
int字面值常量 给 byte 赋值
我们来看一个例子:
public static void main(String[] args) {
byte a = 128;//报错
}
在这个代码中,我们可以发现程序会报错,原因就在于byte的取值范围:-128~127;因此我们需要注意。还有一个容易错的点,我们来看这样一个例子:
public static void main(String[] args) {
byte a = 1;
byte b = 2;
byte c = a + b;//报错
}
a,b,c都是byte类型,CPU在对小于4个字节类型的数据进行运算时,会进行整型提升,所以a+b变成了int类型,因此要想赋值给c,需要强置类型转化。
正确代码:
public static void main(String[] args) {
byte a = 1;
byte b = 2;
byte c = (byte)a + b;
}
类型转换小结
- 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型。
- 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失。
- 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。
类型提升
前面我们已经介绍了一个类型提升的一种情况:在运算小于4个字节的类型时,会将该类型提升为int类型。还有一种,我们来看例子:
public static void main(String[] args) {
int i1 = 10;
long l1 = 20;
int i2=(int)(i1+l1);
}
int时占4个字节,long占8个字节,因此在运算时,会将int类型提升为long类型,在将i1和l1相加,所以此时类型为long,因此不能直接赋值给i2类型,所以我们需要强制类型转化为int类型才能进行赋值。
Java语言的数据类型和常量,变量的介绍就到这里,希望对大家有所帮助,如果有什么错误,欢迎大家私信或者留言,谢谢各位!