JAVA常见的基础知识
1.JAVA重要特点
1.JAVA语言是面向对象的(OOP)
2.JAVA语言是健壮的。JAVA的强类型机制、异常处理、垃圾的自动收集等是JAVA程序健壮性的重要保证
3.JAVA语言是跨平台性的
- .java文件编译成.class文件,不同操作系统上安装与系统一致的JVM,就可以实现JAVA程序跨平台性
4.JAVA语言是解释型的
5.解释型语言:JavaScript PHP JAVA 编译型语言: c c++
6.区别
- 解释性语言,编译后的代码,不能直接被机器执行,需要解释器来执行;编译型语言,编译后的代码,可以直接被机器执行。
2.JAVA运行机制及运行过程
1.JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在JDK中
2.对于不同的平台,有不同的虚拟机
3.JAVA虚拟机机制屏蔽了底层运行平台的差别,实现了"一次编译,到处运行"
3.JDK JRE
-
JDK基本介绍
-
JDK的全称(Java Development Kit JAVA开发工具包),JDK = JRE+JAVA的开发工具
-
JDK是提供给JAVA开发人员使用的,其中包含了JAVA的开发工具,也包含了JRE
-
-
JRE基本介绍
-
JRE(Java Runtime Environment JAVA运行环境),JRE = JVM+JAVA的核心类库
-
包括JAVA虚拟机(JVM java Virtual Machine)和Java程序所需的核心类库等
-
运行Java程序最低的标准
-
4.JAVA执行流程
3.JAVA开发注意事项和细节说明
- JAVA源文件以.java为扩展名。源文件的基本组成部分是类(class)
- JAVA应用程序的执行入口是main()方法,它固有的书写格式:public static void main(String[] args){…}
- JAVA语言严格区分大小写
- JAVA方法由一条条语句构成,每个语句以";"结束
- 大括号都是成对出现的,缺一不可
- 一个源文件最多只能有一个public类,其他类的个数不限
- 如果源文件包含一个public类,则文件名必须按该类名命名
- 一个源文件中最多只能有一个public类。其他类的个数不限,也可以将main方法写在非public类中,然后执行运行非public类,这样入口方法就是非public的main方法
4.编码
1.ASCII
- ASCII码:上个世纪60年代,美国制定了一套字符编码(使用一个字节),对英文字符与二进制位之间的关系,做了统一规定,这被称为ASCII码,ASCII码一共规定了128个字符的编码,只占用了一个字节的后面7位,最前面的一位统一规定为0
- 缺点:不能表示所有字符
2.Unicode
- Unicode的好处:一种编码,将世界上所有符号都纳入其中,每个符号都给予一个独一无二的编码,使用Unicode没有乱码的问题
- Unicode的缺点:一个英文字母和一个汉字都占用了两个字节,这对于存储空间来说是浪费
- 2的16次方是65536,所以最多编码是65536个字符
- 编码0-127的字符是与ASCII的编码一样的,Unicode码兼容ASCII码
3.UTF-8
- UTF-8是互联网上使用最广泛的一种Unicode的实现方式
- UTF-8是一种变长的编码方式,他可以使用1-6个字节表示一个符号,根据不同的符号而变化字节长度
- 使用大小可变的编码,字母占一个字节,汉字占3个字节
5.数据类型
1.数据类型:JVM会在编译时期将boolean类型的数据转换为int,使用1表示true,0表示false
符号 | 字节 | 位 | 默认值 | 包装类型 |
---|---|---|---|---|
byte | 1 | 8 | 0 | Byte |
char | 2 | 16 | ‘\u0000’ | Character |
short | 2 | 16 | 0 | Short |
int | 4 | 32 | 0 | Integer |
float | 4 | 32 | 0.0f | Float |
long | 8 | 64 | 0L | Long |
double | 8 | 64 | 0.0 | Double |
boolean | 1 | 8 | false | Boolean |
2.包装类型:基本类型都有对应的包装类型,基本类型与其对应包装类型之间的赋值使用自动装箱和拆箱完成
Integer x = 2;//装箱 调用了Integer.valueOf(2)
int y = x;//拆箱 调用了x.intValue()
3.基本数据类型缓存池
-
new Integer(123)与Integer.valueOf(123)的区别在于
- new Integer(123)每次都会新建一个对象
- Integer.valueOf(123)会使用缓存池中的对象,多次调用取得一个对象的引用
Integer x = new Integer(123); Integer y = new Integer(123); System.out.println(x == y);//false System.out.println(x.equals(y));//true //Integer.valueOf()会使用缓存池中的对象,多次调用取得同一个对象的引用,在Java8中缓存池的大小为-128~127 Integer z = Integer.valueOf(123); Integer k = Integer.valueOf(123); System.out.println(z == k);//true System.out.println(z.equals(k));//true //超过缓存池大小,不会使用同一对象,可以通过-XX:AutoBoxCacheMax=<size>来指定这个缓冲池的大小 Integer z1 = Integer.valueOf(188); Integer k1 = Integer.valueOf(188); System.out.println(z1 == k1);//false //valueOf()方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接换回缓存池的内容(源码 ) public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
-
基本类型对应的缓存池
符号 默认大小 boolean true/false byte -128~127 short -128~127 char \u0000~\u0007F int -128~127 4.float与double
//float与double:java不能隐式执行向下转型,会使精度降低 //1.字面量属于double类型,不能直接将1.1直接赋值给float变量,向下转型 float f = 1.1;//error float f = 1.1f;//才是float类型 //2.隐式类型转换,字面量1是int类型,它比short类型精度要高,因此不能隐式将int类型向下转型为short类型,但是使用+=/++运算符会执行隐式类型转换 short s = 1; s = s+1;//error
5.字符类型(Char)
- 字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符可以使用String(字符串)
//显示char的基本使用 char a = 'a'; char a1 = '\t';//制表符 char a2 = 97; System.out.println(a+"--"+a1+"---"+a2+"---");//a-- ---a---
-
字符细节使用【注意】
-
字符常量是使用单引号括起来的单个字符
-
Java中还允许使用转义字符’\'来将期后的字符串转变为特殊字符型常量
-
在java中,char的本质是一个整数,在输出时,是unicode码对应的字符
-
可以直接给char赋值一个整数,然后输出时,会按照对应的unicode字符输出
-
char类型是可以进行运算的,相当于一个整数,因为他都是对应的Unicode码
【需要输出整数(int),需要输出字符(char)】
char ch = 97; char chs = 'A'; System.out.println(chs-ch);//32
-
-
字符类型本质
- 字符型存储到计算机中,需要将字符对应的码值(整数)找出来,转为二进制存储到计算机
- 字符和码值的对应关系是通过字符编码表决定的(是规定好的)
- 常用的字符编码
- ASCII (ASCII编码表 一个字节表示,一个128个字符,实际上一个字节可以表示256个字符,只用了128)
- Unicode(Unicode编码表 固定大小的编码,使用两个字节来表示字符,字母和汉字同一都是占两个字节,浪费空间)
- UTF-8(编码表,大小可变的编码 字母使用一个字节,汉字使用三个字节)
- GBK(编码表 可以表示汉字,而且范围广,字母使用一个字节,汉字二个字节)
- GB2312(编码表 可以表示汉字 GB2312 < GBK)
- big5码(繁体中文,中国台湾 香港)
6.布尔类型 boolean
- 布尔类型也是boolean类型,boolean类型数据只允许取值true和false,无null,默认为false
- 布尔类型占一个字节
- boolean类型适用于逻辑运算,一般用于程序流程控制
7.基本数据类型的转换
-
自动类型转换
-
java程序在进行赋值或运算时,精度小的类型自动转换为精度大的数据类型
char----> int-----> long----->float-------->double
byte ---->short----->int----->long—float---->double
-
-
自动类型转换【注意】
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
- 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换
- (byte,short)和char之间不会相互自动转换
- byte,short,char三者计算时,在计算机系统中,会自动转换为int进行计算
-
强制类型转换
- 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,使用时要加上强制转换符(),但可能造成精度损失
-
强制类型转换细节说明【注意】
-
当进行数据的大小从 大---->小,就需要使用强制转换
-
强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
-
char类型可以保存int的常量值,但不能保存int的变量,需要强转
char nums = 100; int numx = 100; //char c2 = numx; 需要进行强制类型转换 char c3 = (char)numx; System.out.println(c3);//d
-
byte和short类型在进行运算时,当做int类型处理
-
8.String和基本数据类型转换
-
基本数据类型转换为字符串
String.ValueOf();
-
字符串转换为基本数据类型
//int Integer.parseInt(""); //double Double.parseDouble(""); //float Float.parseFloat(""); //short Short.parseShort(""); //long Long.parseLong(""); //boolean Boolean.parseBoolean(""); //byte Byte.parseByte("")
-
字符和字符串之间的转换
//返回index位置的char字符(从0计数) String str = "Hello,world"; str.charAt(index); //将字符串转为字符数组 str.toCharArray(); //1.将字符数组转化为字符串 String strs = String.valueOf(new char[] {'c','e','r'}); //2.将字符转化为字符串效率最高的方法 String s = String.valueOf('c'); //3.通过Character的toString(char)方法 ====>实际上还是调用String.ValueOf(char) String tr = Character.toString('c');
6.键盘输入
import java.util.Scanner; Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); System.out.println(i);