200-Java语言基础-Java编程入门-002 | Java基本概念
一、Java注释
1、注释的本质,编译器在进行程序编译的时候如果发现有注释的内容将不对此部分进行编译处理(书写注释是一个非常好的习惯),Java中有三类注释:
-
单行注释 ://;(单行注释可以嵌套)
-
多行注释:/*.......*/;(多行注释不可以嵌套)
-
文档注释:/**...........*/;
注释可以帮助我们进行排错
1 package com.sujian; 2 3 4 public class HelloWorld { 5 6 7 public static void main(String[] args) { 8 // 单行注释 9 // 输出一个Hello World 10 System.out.println("Hello World"); 11 12 13 // 多行注释 /* 注释 */ 14 /* 15 多行注释 16 多行注释 17 多行注释 18 多行注释 19 多行注释 20 */ 21 22 23 // 有趣的代码注释 24 /*** 25 * _ooOoo_ 26 * o8888888o 27 * 88" . "88 28 * (| -_- |) 29 * O\ = /O 30 * ____/`---'\____ 31 * . ' \\| |// `. 32 * / \\||| : |||// \ 33 * / _||||| -:- |||||- \ 34 * | | \\\ - /// | | 35 * | \_| ''\---/'' | | 36 * \ .-\__ `-` ___/-. / 37 * ___`. .' /--.--\ `. . __ 38 * ."" '< `.___\_<|>_/___.' >'"". 39 * | | : `- \`.;`\ _ /`;.`/ - ` : | | 40 * \ \ `-. \_ __\ /__ _/ .-` / / 41 * ======`-.____`-.___\_____/___.-`____.-'====== 42 * `=---=' 43 * 44 * ............................................. 45 * 佛祖保佑 永无BUG 46 */ 47 } 48 } 49
二、标识符与关键字
1、标识符:由字母、数字、下划线(_)、$所组成,其中不能使用数字开头,不能使用Java的关键字,区分大小写
-
给类、接口、方法、变量等起名字是使用的字符序列
2、关键字:系统对于一些结构描述的处理,有着特殊的含义。Java中的关键字一共包含有如下内容
-
被Java语言赋予特定含义的单词
-
组成关键字的字母全部小写
-
不能使用关键字作为变量名、方法名
![](https://img2020.cnblogs.com/blog/1321515/202103/1321515-20210308113136486-2059356879.png)
三、常量
-
什么是常量:在程序执行过程中其值不可能发生改变
-
常量的分类:
-
字面值常量
-
自定义常量
-
字面值常量的分类
-
字符串常量(用双引号括起来的内容)
-
整数常量(所有整数)
-
小数常量(所有小数)
-
字符常量(用单引号括起来的内容,里面只能存放单个数字、单个字母、单个符号)
-
布尔常量(较为特殊、只有true和false)
-
空常量(null、数组部分)
四、变量
-
什么是变量:在程序执行的过程中,在某个范围内其值可以发生改变的量
-
变量的定义格式
-
数据类型 变量名 = 变量值;
-
定义变量的意义
-
用来不断的存放同一类型的变量,并可以重复使用
五、Java数据类型分类
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
1、在Java语言之中对于数据类型一共分为两类:
-
基本数据类型:描述的是一些具体的数据单元,
-
整数型:
-
整形:byte(-128~127)、short、int、long; → 默认值:0
-
浮点型:
-
float、double; → 默认值:0.0
-
布尔型:boolean → 默认值:false
-
字符型:char(0~65535) → 默认值:'\u0000'
-
引用数据类型:牵扯到内存关系的使用;
-
数组、类、接口 → 默认值:null
每一种基本数据类型都有一种保存的数据范围,不同的类型保存有不同范围的数据,但这里面实际上就牵扯到了数据类型的选择上,那么对于以下的数据类型划分给出个人使用的一些参考原则:
-
如果要是描述数字首选的一定是int(整数)、double(小数);
-
如果要进行数据传输或者进行文字编码转换使用byte类型(二进制处理操作);
-
处理中文的时候最方便的操作使用的是字符char来完成(可选概念);
-
描述内存或文件大小、描述表的主键列(自动增长)可以使用long;
![](https://img2020.cnblogs.com/blog/1321515/202103/1321515-20210308113200202-373508650.png)
六、整型数据
整型数据一共四种,按照保存的范围由小到大来讲:byte、short、int、long,那么在Java里面任何的一个整型常量其默认的类型都是int型(只要是整数就是int类型的数据)。
范例:
1 public class JavaDemo{ 2 public static void mian(String [] args){ 3 // int 变量名 = 常量(10是一个常量,整数类型为int) 4 int x = 10;//定义了一个整数变量x、 5 x = 20;//改变了x值 6 // int型变量 * int型变量 = int型变量 7 System.out.println(x * x); 8 } 9 } 10 10永远不会改变,但是x是一个变量,x是可以改变的
任何的数据类型都是有其可以保存的数据范围的(正常使用下很少会超范围的数据),如果超出范围会怎样呢?通过代码来进行观察
1 public class JavaDemo{ 2 public static void main(String[] args) { 3 int max = Integer.MAX_VALUE; // 获取int最大值 4 int min = Integer.MIN_VALUE; // 获取int最小值 5 System.out.println(max);// 2147483647 6 System.out.println(min);// -2147483648 7 System.out.println("-----------------------------"); 8 // int型变量 + int型常量 = int型计算结果 9 System.out.println(max + 1);// -2147483648,最大值 + 1 = 最小值 10 System.out.println(max + 2);// -2147483647,最大值 + 2 = 次最小值 11 } 12 } 13 通过此时的执行结果可以发现这些数字在进行处理的时候,如果超过了其最大的保存范围,那么将出现有循环的问题这样的问题在Java中被称为数据溢出,那么如果想要解决这种溢出,那么可以继续扩大范围。
解决数据溢出:
-
在操作的时候预估数据范围,如果发现范围不够就使用更大范围
-
除了可以定义long型的变量之外,也可以直接在常量上进行处理,默认的整数常量都是int型,那么可以为它追加字母“L”或直接使用“(long)”转换
1 public class JavaDemo{ 2 public static void main(String[] args) { 3 int max = Integer.MAX_VALUE; // 获取int最大值 4 int min = Integer.MIN_VALUE; // 获取int最小值 5 System.out.println(max);// 2147483647 6 System.out.println(min);// -2147483648 7 System.out.println("-----------------------------"); 8 // int型变量 + long型常量 = long型计算结果 9 System.out.println(max + 1L);// 2147483648 10 System.out.println(max + 2L);// 2147483649 11 // long型变量 - int型常量 = long型计算结果 12 System.out.println((long)min - 1);// 2147483649 13 } 14 } 15 数据类型之间转换:范围小的数据类型可以自动转换为范围大的数据类型,反之范围大的数据类型要转为范围小的数据类型,那么必须采用强制转换的处理模式,同时还需要考虑可能带来的数据溢出
强制类型转换
1 public class JavaDemo{ 2 public static void main(String[] args) { 3 long x = 2147483647; 4 // 强制转换 5 int temp = (int) x; 6 System.out.println(temp); 7 } 8 } 9 程序有支持数据转换处理,但是如果不是必须情况下不建议这中转换 10 在进行整型处理的时候,还有一个byte类型特别需要注意,首先这个类型的范围是-128~127,数据量很小
定义byte变量
1 public class JavaDemo{ 2 public static void main(String[] args) { 3 byte num = 10; 4 System.out.println(num); 5 } 6 } 7 正常来讲在Java程序中20这个数据应该是int类型,但是在为byte赋值的时候并没有因为是int型而发生强制类型转换,这是因为Java对byte做了特殊处理,即:如果没有超过byte范围的常量可以自动有int变为byte,如果超过byte范围就要进行强制类型转换。
1 int强制转换为byte 2 public class JavaDemo{ 3 public static void main(String[] args) { 4 byte num = (byte)200; 5 System.out.println(num); //-56 数据溢出 6 } 7 } 8 由于200已经超过了byte的数据范围,所以产出了数据溢出的问题 9 对于常量可以自动适配转换,但是对于变量还是不许使用强制转换处理 10 int x = 200; 11 byte num = (byte)x;
七、浮点型数据
浮点数据描述的是小数,而Java里面任意的一个小数常量其对应的类型为double。
1 // 定义double变量 2 public class JavaDemo{ 3 public static void main(String[] args) { 4 // 10.2是一个double类型的常量 5 double x = 10.2; 6 int y = 10; 7 // double类型 * 整型 = double类型 8 double result = x * y; 9 System.out.println(result); 10 } 11 }
所有的数据类型进行自动转型的时候都是由小类型向大类型进行自动转换处理,默认的类型为double,但是也可以定义位数相对较少的float变量,此时此时从赋值的时候就必须采用强制类型转换
1 // 定义float变量 2 public class JavaDemo{ 3 public static void main(String[] args) { 4 float x = (float) 10.2; 5 float y = 10.1F; 6 System.out.println(x * y); 7 } 8 }
通过一系列的代码分析发现,整型是不包含有小数点的,而浮点型是包含有小数点的
1 // 实例:观察程序 2 public class JavaDemo{ 3 public static void main(String[] args) { 4 int x = 10; 5 int y = 4; 6 System.out.println(x / y); // 2 7 } 8 } 9 此时的计算结果为2,得到2的主要原因在于:整型是不保存有小数点的,所以现在的计算结果为“2.5”,那么抛开小数点不看,最终结果为“2”;如果要想得到正确的计算结果“2.5”,那么就需要进行转型处理 10 11 // 实例:转型处理 12 public class JavaDemo{ 13 public static void main(String[] args) { 14 int x = 10; 15 int y = 4; 16 System.out.println( (double)x / y); // 2 17 } 18 }
在以后计算的时候千万要注意你选择的数据类型,将直接决定小数点的问题。
八、字符型数据
字符型使用的是char进行定义的,在Java之中使用“ ' ”(单引号)定义的内容就是一个字符。
1 // 实例:定义一个字符型变量 2 public class JavaDemo{ 3 public static void main(String[] args) { 4 char c = 'B'; // 一个字符变量 5 System.out.println(c); 6 } 7 }
在任何的编程语言之中,字符都可以与int进行互相转换,也就是说这个时候字符中所描述的内容可以通过int获取其内容对应的系统编码。
1 // 观察char与int的关系 2 public class JavaDemo{ 3 public static void main(String[] args) { 4 char c = 'A'; // 一个字符变量 5 int num = c; // 得到字符的编码 6 System.out.println(num); 7 } 8 } 9 对于以上的程序获得了编码,这里有几个范围需要注意一下: 10 大写字母范围:'A'(65)~ 'Z'(90); 11 小写字母范围:'a'(97)~ 'z'(122); 12 数字的范围:'0'(48)~ '9'(57);
通过编码的范围可以发现大小写字母之间差32个数字长度,在这样的一个情况下可以实现字母的大小写的转换处理
1 // 范例:将小写字母转为大写字母 2 public static void main(String[] args) { 3 char c = 'a'; // 一个字符变量 4 int num = 32; // 得到字符的编码 5 char a = (char) (c - num); 6 System.out.println(a); 7 }
到此为止所有的操作都与传统的C语言的方式是一样的,但是需要注意的是,在Java里面char主要进行的是中文的处理,所以一定要记住,Java中的char类型可以保存中文数据
1 // 范例:保存中文数据 2 public class JavaDemo { 3 public static void main(String[] args) { 4 char c = '宿'; // 一个字符变量 5 int num = c; // 得到字符的编码 6 System.out.println(num); 7 } 8 }
之所以在Java语言里面可以使用char进行中文数据的保存,是因为Java使用的是unicode这种十六进制的编码,主要特点是可以包括任意的文字内容,使得程序开发更加的简单。
九、布尔数据
布尔是一位数学家的名字,布尔主要描述的是一种逻辑的处理结果,在Java中使用Boolean来进行布尔类型的变量定义,布尔类型的区直范围只有两个数据:true、false。
1 // 范例:定义布尔型数据 2 public class JavaDemo { 3 public static void main(String[] args) { 4 boolean flag = true; 5 if(flag = true ) { 6 System.out.println("2020"); 7 } 8 System.out.println("---------"); 9 } 10 }
有些编程语言由于没有提供布尔类型,所以会使用0表示false,或者使用非0表示true;而这样的逻辑在Java之中是不存在的。
1 public class JavaDemo { 2 public static void main(String[] args) { 3 // 整数类型 4 byte b = 10; // 占一个字节,-128~127 5 short s = 20; // 占两个字节 6 int i = 23; // 占四个字节 整数默认的数据类型就是int类型 7 long x = 8888888888L; // 占八个字节 如果long类型后面加L进行标识 8 System.out.println(b); 9 System.out.println(s); 10 System.out.println(i); 11 System.out.println(x); 12 13 // 浮点类型 14 float f = 12.3F; // 占四个字节 15 double d = 332.4; // 占八个字节 小数默认的数据类型是double 16 17 System.out.println(f); 18 System.out.println(d); 19 20 // 字符类型 21 char c = 'c'; // 占两个字节 22 System.out.println(c); 23 24 // 布尔类型 25 boolean b1 = true; 26 boolean b2 = false; 27 System.out.println(b1); 28 System.out.println(b2); 29 } 30 }
使用变量注意事项:
-
作用域问题
-
同一个区域不能使用相同的变量名
-
初始化值问题
-
局部变量在使用之前必须赋值
-
一条语句可以定义多个变量
-
int a, b, c, ....
十、String字符串
在任何语言里面都没有提供所谓的字符串这种基本数据,但是从实际的使用上来讲各个编程语言为了方便程序的开发,也都会提供有字符串的相应描述;在Java中使用String作为字符串的定义
由于String类的存在较为特殊,所以其可以像普通变量那样采取直接赋值的方式进行字符串的定义,并且要求使用“ "" ”(双引号)进行字符串描述
1 // 定义一个字符串 2 public class JavaDemo { 3 public static void main(String[] args) { 4 String str = "中国加油"; // 使用双引号进行描述 5 System.out.println(str); 6 } 7 }
在进行字符串变量使用的时候可以使用“+”来进行字符串的拼接处理。
1 // 实现字符串连接 2 public class JavaDemo { 3 public static void main(String[] args) { 4 String str1 = "HELLO "; // 使用双引号进行描述 5 String str2 = "WORLE!"; // 使用双引号进行描述 6 System.out.println(str1 + str2); 7 } 8 }
此时对于“+”就有了两种描述:字符串的连接、数字的加法计算。
1 public class JavaDemo { 2 public static void main(String[] args) { 3 double x = 10.222; 4 int y = 1111; 5 String str = "计算结果为:" + x + y; 6 System.out.println(str); // 计算结果为:10.2221111 7 (此时+就是字符串拼接) 8 } 9 }
在Java语言里,数据范围大的数据类型与数据范围小的数据进行计算的时候,所有范围小的数据类型自动转型为范围大的数据类型,如果此时有String字符串,则所有的类型无条件先变为String,如果有“+”表示就是字符串的拼接
1 public class JavaDemo { 2 public static void main(String[] args) { 3 double x = 10.222; 4 int y = 1111; 5 String str = "计算结果为:" + (x + y); 6 System.out.println(str); // 计算结果为:1121.222 7 } 8 }
在描述字符串的时候可以使用转移字符进行一些处理。例如:TAB(\t)、“(\")、’(\')、换行(\n)、\(\\)
1 // 观察转义字符 2 public class JavaDemo { 3 public static void main(String[] args) { 4 System.out.println("hello world \n \"hello china\""); 5 } 6 } 7 这些字符可以在学习中进行一些简单的格式化显示处理
十一、数据类型转换之隐式转换
1 public class JavaDemo { 2 public static void main(String[] args) { 3 // 数据类型转换之隐式转换 4 int x = 3; 5 byte b = 4; 6 // int类型 + byte类型 = int类型 7 x = x + b; 8 System.out.println(x); 9 } 10 }
![](https://img2020.cnblogs.com/blog/1321515/202103/1321515-20210308115023499-1465282925.png)
十二、数据类型转换之强制转换
1 public class JavaDemo { 2 public static void main(String[] args) { 3 // 数据类型转换之强制转换 4 int x = 3; 5 byte b = 4; 6 // 强制类型转换 7 b = (byte) (x + b); 8 System.out.println(b); 9 } 10 }
![](https://img2020.cnblogs.com/blog/1321515/202103/1321515-20210308115100783-1983049740.png)
强制类型转换注意事项:
-
如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
1 public class JavaDemo { 2 public static void main(String[] args) { 3 // 00000000 00000000 00000000 10000010 130的二进制 4 // 10000010 -126补码 5 // 00000001 -1求反码 6 // 10000001 -126的反码 7 // 11111110 -126的原码 8 byte b = (byte)(126 + 4); 9 System.out.println(b); // -126 10 11 } 12 }
十三、面试题之变量相加和常量相加的区别
1 public class JavaDemo { 2 public static void main(String[] args) { 3 // 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。 4 byte b1 = 3; 5 byte b2 = 4; 6 // byte b3 = b1 + b2; 7 /* 8 从两方面 9 1、byte与byte(或short,char)进行运算的时候会提升为int。两个int类型相加的结果也是int类型 10 2、b1与b2是两个变量,变量存储的值是变化的,在编译过程中无法判断里面具体的值,相加有可能超出byte的取值范围 11 */ 12 // System.out.println(b3); 13 byte b4 = 3 + 4; // java编译器有常量优化机制 14 System.out.println(b4); 15 } 16 }
十四、long与float的取值范围谁大谁小
进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的:
-
(byte,short,char) -- int -- long -- float -- double
-
float的数据取值范围要大于long的数据取值范围