学习java已经三天啦,虽然还是懵懵懂懂的状态,但还是有一些收获和见解的,下面来复盘一下这几天的理解。
目录
一、初识Java
1、类:
一个Java文件中可以有若干类,但是只能有一个 public 类,并且这个public class 必须与文件名相同,否则程序报错。
并且每个类中都存在方法,方法类似于C语言中的函数,每个类中有且只有一个main class{ }
2、打印:
想要在屏幕输出时,可以用“println”,输出字符串“hello world”的代码如下:
public class Test {
public static void main(String[]args){
System.out.println("hello world");
}
}
并且“println”自带直接换行的功能。
3、数组定义:
Java 定义数组时,直接将类型名写在前面,后面接变量名,int [ ] arr,表示的定义的变量名为arr的整型数组。
4、运行过程:
5、标识符:
标识符是指类名、方法名、变量取的名字。需要注意以下几点:
(1)标识符不能是关键字;
(2)main可以做标识符;
(3)标识符中可以包含数字、字母、下划线、$符号,其中数字不可以作为开头,$不建议开头;
(4)定义常量时,一般用大写字母。
二、数据类型与变量
1、数据类型
可分为基本数据类型和引用数据类型,今天我们主要介绍八种基本数据类型:
数据类型 | 关键字 | 字节大小 | 数值范围 |
字节型 | type | 1 | -128~127 |
短整型 | short | 2 | -2^15~2^15-1 |
整型 | int | 4 | -2^31~2^31-1 |
长整型 | long | 8 | -2^63~2^63-1 |
单精度浮点数 | float | 4 | 不关注 |
双精度浮点数 | double | 8 | 不关注 |
字符类型 | char | 2 | 0~65535 |
布尔类型 | boolean | 无明确规定 | true 和 false |
需要知道的是:
(1)不论电脑是64位还是32位系统,上述字节大小都不会发生改变;
(2)Java中不存在无符号数字;
(3)整型默认为 int 型;浮点型默认为 double。
2、变量
1、定义和结构
对于一些会经常发生改变的内容,没有固定的值,这些我们称之为变量,身高、体重、年龄等等,上述的数据类型就是用来定义不同种类的,结构如下:
数据类型 变量名 = 初始值;
比如我们定义两个整型变量 a 和 b ,初始值赋予1和2;定义一个布尔类型为假的:
int a = 1;
int b = 0;
或者 int a=1,b=0;
//布尔
boolean b = false;
需要注意的是当我们定义 float 和 long 时,需要在值后面加 L 或者l,否则会被默认赋值为 double 和 int类型。
long a = 10L;//定义一个变量a,数值是10的长整型变量
如果定义的局部变量没有初始化,那么程序在使用前一定要初始化,否则无法运行。当赋值大于这个变量所属数据类型的范围时,程序会编译报错。
2、使用细节
(1)整型中C语言里没有的是 type类型,这个类型用法和int 基本一致,知只是范围相对后者来说要小很多,同时这个类型用的相对也比较少;
(2)在Java中,int/int得到的还是int 型,如果想要输出小数,要改成小数形式;
(3)相比较于C语言中的ASSCII,Java有自己的Unicode表示字符,且包含有ASSCII,并加了其他一些字符,包括中文。Unicode占两个字节,没有负数,范围为0~653;
(4)Java中使用 单引号+单个字母 的形式表示字符字面值,java中的字符可以存放整型。
3、包装类型
每种基本数据类型都对应有自己的包装类型,除了char的包装类型为Character以及int包装类型为Integer外,其余几个包装类型为对应的关键字的第一个字母大写。至于包装类型的作用是什么,以后会继续深入学习。
4、类型转换
相对于C语言来讲,在类型转换这一块,java是十分严格的,不同类型之间的变量相互复赋值的时候,会进行严格的校验。类型转换分为两种自动类型转换和强制类型转换,又分别叫隐式转换和显式转换。
(1)自动类型转换(隐式)
字面理解就足以说明,就是编译器自动给你转换的,隐式,偷偷摸摸的,没让你知道的,这种对应的是将小范围的数据类型转为范围大的。就像一个矿泉水瓶和一个水缸,我现在在矿泉水瓶里面放了水,我想把水放进缸里,矿泉水瓶本身就能装的下的水,放进缸里也一定能放得下,所以就直接转换就可以,自动类型装换就是这样,举例说明一下:
int a = 10;
long b = 20L;
b=a;
因为 b 的范围要大于a 的范围,在编译时,编译器会自动将 a 提升为long型,然后赋值,能够编译
(2)强制类型转换(显式)
那与隐式相反,显示就是把范围大的变量的值赋给范围小的,把缸里的水放进瓶子里,这样做很不安全,很容易谁就贯满溢出了,编译器是不会支持这么冒险的事情的,所以我们进行强制转换,我们人为地强迫他试着把水灌进瓶子里,代码是:
int a = 10;
long b = 20L;
a=(int)b;
强制类型转换可能会导致精度丢失,而且转换不一定能成功。
(3)注意
不相干的类型不能转换,比如布尔类型和字符串之间是无法转换的。当我们在对变量进行赋字面值时(直接的数字和字符串),编译器会进行检查,如果超过变量类型的范围,则无法编译。
5、类型提升
关于类型提升的有几个注意的点:
(1)首先要知道在Java中,最小的计算字节为4个字节,所以 short、byte这两种类型在计算的时候需要整型提升为 int 类型。
byte a = 10;
byte b = 5;
byte c = a+b;//这句无法执行,因为默认a 和 b 是整型,所以正确的是
int c = a+b ;//或者对(a+b)进行强制类性转换 byte c = (byte)(a+b);
(2)int 和 long 的计算时,int 被提升为long ,结果也同样是long类型;
6、字符串类型
在Java 中字符串是有自己的类型的,关键字为String,包装类型为String。字符串和整型之间的一些运算关系细节:
(1)当字符串和整数在一起使用 “+”的时候,“+”就是一个拼接的意思,两个字符串“+”的时候也同样是拼接的意思。
int a = 10;
String s = hello;
String str = a + s;
//str 的结果为“10hello”;
int a = 10;
int b = 20;
String s = hello;
System.out.println(a+b+s) //输出结果为“30hello”
System.out.println(s+a+b) //输出结果为“hello1020” 因为上一个是整型假加法在前面,在打印的时候从左向右进行,第一步正常计算,第二步进行整型和字符串的拼接,而第二种第一步直接就是拼接,所以最终结果为拼接结果。
(2)int 转成 String
int a = 10;
String s = a+""; //直接进行整数与空白字符串拼接
string str =String.valueOf(a); //利用String.中提供的方法
(3)String转成int
String str = "10";
int a = Integer.parselnt(str); //只有一种利用int的包装类型提供的方法来进行转换