目录
前言:
之前小编一直和大家分享C语言方面的知识,如果有需要的同学可以转战小编的其他博客,接下来就让小编带你一起来走进Java吧!在这节中小编主要是讲解一些Java的基础知识,以及Java与C语言不同的地方,带你一起入门Java。带你一起体验詹姆斯·高斯林说的:“Write once,Run anywhere!”。
1.什么是Java
Java是一种优秀的程序设计语言,它还是一个有一系列计算机软件和规范形成的技术体系。这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境 ,并广泛用于嵌入式系统、移动中都阿奴、企业服务器、大型的等各种场合。
2.Java的语言特点
简单性、面向对象、分布式(微服务)、健壮性、安全性、体系结构中立、可移植性、解释性、高性能、多线程、动态性。
3.初识Java的main方法
示例:
类与方法的关系图:
解释:
源文件(扩展名为*.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包含在花括号里面。
类:类中带有一个或多个方法。方法必须在类的内部声明。
方法:在方法的花括号中编写方法应该执行的语句。
总结:类存在于源文件里面,方法存在于类中,语句存在于方法中。
注意:
在一个源文件中只能有一个public修饰的类,而且源文件名字必须与public修饰的类名字相同。
Java的运行环境:
JVM:是Java的运行环境。
程序运行的过程:
我们知道在下载Java时我们先要下载JDK,这个是Java的开发工具,那么在JDK下面还有JRE,JRE下来才是JVM。下面给大家解释一下它们三个的关系和概念:
JDK:(Java Development Kit)Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器,javac与自带的调试工具Jconsole、istack等。
JRE:(Java Runtime Environment):Java运行时环境,包含了JVMJava基础类库,是使用Java语言编写程序运行的所需的环境。
JVM:Java虚拟机,运行Java代码。
4.注释
注释是为了让代码更容易被读懂而附加的描述信息,不参与编译运行,但是却非常重要。
块注释:
/*
这是块注释
*/
行注释:
//这是行注释
文档注释:
/**
这是文档注释
*/
注释规范:
- 内容准确:注释内容要和代码一致,匹配,并在代码修改时及时更新。
- 篇幅合理:注释既不应该太精简,也不应该长篇大论。
- 使用中文:一般中国公司都要求使用中文写注释,外企另当别论。
- 积极向上:注释中不要包含负能量。
注意:
- 多行注释不能嵌套使用 。
- 不论是单行还是多行注释,都不参与编译,即编译后产生的class文件不包含注释。
5.标识符
在程序中由用户给类名、方法名或者变量名所取的名字。
规则:
标识符中可以包含:字母、数字以及下划线和$符号等等。
一般情况下:
- 类名:每个单词的首字母大写,即以大驼峰的形式写。
- 方法名:首字母小写,后面每个单词的首字母大写(小驼峰)。
- 变量名:与方法名规则相同。
注意:
标识符不能以数字开头,也不能是关键字,且严格区分大小写。
6.关键字
关键字是由Java语言提前定义好的,有特殊含义的标识符,或者保留字。
注意:用户不能使用关键字定义标识符!!!
基本数据类型有四类八种:
7.数据类型
用于定义访问权限修饰符的关键字 | ||||
private | protected | pubilc | ||
用于定义类,函数,变量修饰的关键字 | ||||
abstract | final | static | synchronize | |
用于定义建立实例及引用实例,判断实例的关键字 | ||||
extends | implements | |||
用于异常处理的关键字 | ||||
try | catch | finally | throw | throws |
用于包的关键字 | ||||
package | import | |||
其他修饰关键字 | ||||
native | strictfp | transient | volatile | assert |
在数据类型中分为两大类:
- 基本数据类型
- 引用数据类型
那么下面我们就分别给大家介绍一下,但是这里着重讲基本数据类型。
7.1基本数据类型
四类:整型、浮点型、字符型、布尔型。
八种:
数据类型 | 关键字 | 内存占用 | 范围 |
字节型 | byte | 1字节 | -128~127 |
短整型 | short | 2字节 | -32768~32767 |
整型 | 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 |
注意:
- 在Java中,直接赋值不能超过数据类型所能够表达的最大范围。
- boolean数据类型只有2个值,要么是true要么就是false,与C语言不同,不会存在0是假非0是真。
- 不论是在16位系统还是在32位系统下,int都占用4个字节,long都占8个字节。
- 整形和浮点型都是带有符号的。
- 整形的默认为int型,浮点型的默认为double型。
- 字符串属于引用数据类型。
8种基本数据类型所对应的包装类分别是:
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
注意:其中要特别注意int和char两个类型所对应的包装类。
其中包装类的概念我们在后期进行介绍,这里就简单理解为包装类就是各个类所对应的类类型是各个类的加大版,功能比原本的类更加强大。
7.2引用数据类型
前期我们就只接触两种String和Byte,后期我们再对它们进行讨论,这次我们主要对基本数据类型进行讨论。
8.变量
在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩等等,对于这些经常改变的内容,在Java程序中,称为变量,而数据类型就是用来定义不同变量的。
语法格式:
数据类型 变量名 = 初始值;
8.1.整形变量
int:
注意:
- int无论在何种系统下都是4个字节。
- 在定义时给定初始值,如果没有合适的,可以设置为0。
- 在给定变量设置初始值时,值不能超过int的表示范围,否则会导致溢出。
- 变量在使用之间必须要赋初始值,否则编译器就会报错。
8.2.长整形变量
long:
注意:
- 长整形变量的初始值后面得加上。
- 长整形无论在哪个系统下都占8个字节。
8.3浮点型变量
8.3.1单精度浮点型
float:
代码如下所示:
public class Test3 {
public static void main(String[] args) {
//数字后面加f
float f1 = 1.2f;
System.out.println(f1);
//数字后面加F
float f2 = 1.2F;
System.out.println(f2);
}
}
结果如下所示:
由于float所表示的范围比较小所以一般在工程中用到的是double类型的。
8.3.2双精度浮点型
double:
代码如下所示:
public class Test4 {
public static void main(String[] args) {
//当两个整数相除时会使得小数部分丢失
int a = 1;
int b = 2;
System.out.println(a / b);
//转换成浮点型后就不会丢失了
double d1 = 1.0;
double d2 = 2.0;
System.out.println(d1 / d2);
}
}
结果如下所示:
注意:
- double在任何系统下都占8个字节。
- 浮点数与整数在内存中存储方式不同,不能单纯的使用2^n来计算
- double类型的内存布局遵守IEEE754标准,尝试 使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差,因此浮点数是一个近似值,并不是精确值。
8.4字符型变量
char:
代码如下所示:
public class Test1 {
public static void main(String[] args) {
char ch1 = '和';
char ch2 = 'A';
System.out.println(ch1);
System.out.println(ch2);
}
}
结果如下所示:
注意:
- 在Java中使用单引号+单个字母的形式表示字符字面值。
- 计算机中的字符本质上是一个整数,在C语言中使用ASCII码值来表示字符,而在Java中我们使用Unicode来表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文。
8.5布尔型变量
boolean:
代码如下所示:
public class Test2 {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
System.out.println(b1);
System.out.println(b2);
}
}
结果如下所示:
注意:
- boolean类型的变量只有两种情况的取值,true表示真,false表示假。
- Java中boolean类型和int类型不能相互转换,不存在1表示真,0表示假。
- Java虚拟机规范中并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现中,boolean占1个字节。
9.类型转换
类型的转换分为两种:
- 自动类型转换(隐式)
- 强制类型转换(显示)
9.1自动转换
自动类型转换又称为隐式转换,即代码不需要任何处理,在代码编译时,编译器会自动进行处理。
特点:
数据范围小的转换为数据范围大时会自动进行 。
代码如下所示:
public class Test5 {
public static void main(String[] args) {
int a = 100;
long b = 10L;
//数据范围小的往数据范围大的转换的时候是自动进行的
b = a;
System.out.println(b);
//如果数据范围大的往数据范围小的转换时,如果不加任何处理编译器就会报错
//a = b;
}
}
结果如下所示:
9.2强制转换
当进行操作时代码需要进行一定的格式处理,不能自动完成。
代码如下所示:
public class Test6 {
public static void main(String[] args) {
int a = 10;
float b = 1.0F;
//如果按照下面的直接赋值的话可能会造成数据丢失,所以编译器就会报错
//a = b;
//经过强制类型转换后就不会报错了
a = (int)b;
System.out.println(a);
}
}
结果如下所示:
注意:
- 不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型。
- 如果需要吧范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失。
- 将一个字面值常量进行赋值的时候,Java会自动针对数字范围进行检查。
- 强制类型转换不一定能成功,不相干的类型不能互相转换。
10.类型提升
10.1int与long之间
int与long之间,int就会被提升为long。
代码如下所示:
public class Test7 {
public static void main(String[] args) {
int a = 10;
long b = 20L;
System.out.println(b / a);
}
}
结果如下所示:
10.2byte与byte的运算
我们先来看一下面的这一段代码为什么会报错?
由于是byte和byte都是相同的类型,但是会出现编译报错,原因是虽然a和b都是byte,但是计算a+b时会将a和b先都提升成int型,再进行计算,得到结果也就是int型的故而会出现错误。
正确代码如下所示:
public class Test8 {
public static void main(String[] args) {
byte a = 10;
byte b = 10;
byte c = (byte)(a + b);
System.out.println(c);
}
}
结果如下所示:
11.字符串类型
在C语言中是没有String类型的,但是在Java中我们可以定义一个字符串(String)类型的变量。
代码如下所示:
public class Test9 {
public static void main(String[] args) {
String s1 = "hello ";
String s2 = "world";
//通过+可以对字符串进行拼接
System.out.println(s1 + s2);
}
}
结果如下所示:
有些情况下我们需要将字符串和整形数字之间进行转换:
方法一:
通过加“ ”来进行转换。
方法二:
通过String.valueOf()来进行转换。
代码如下所示:
public class Test10 {
public static void main(String[] args) {
int num = 10;
//方法一:
String str1 = num + " ";
System.out.println(str1);
//方法二:
String str2 = String.valueOf(num);
System.out.println(str2);
}
}
结果如下所示:
上述是将一个int类型的值转换成String类型的值,那么如何将一个String类型的值转换成一个int类型的值呢?
我们可以通过Integer.parseInt()来进行转换。
代码如下所示:
public class Test11 {
public static void main(String[] args) {
String str1 = "100";
int num = Integer.parseInt(str1);
System.out.println(num);
}
}
结果如下所示:
12.运算符
12.1什么是运算符
简单来说就是对操作数进行操作时的符号,不同运算符操作的含义不同,下面我们就来一一讲解一下,但是与C语言的操作符也没有太大的区别。
12.2算数运算符
基本的s四则运算符:+、-、*、/、%。
下面着重讲解一下取模(%)运算符。
我们直接拿下面的代码来讲解。
代码如下所示:
public class Test12 {
public static void main(String[] args) {
System.out.println(10 % 3);//1
System.out.println(10 % -3);//1
System.out.println(-10 % 3);//-1
System.out.println(-10 % -3);//-1
}
}
结果如下所示:
12.3增量运算符
增量运算符有:+=、-=、*=、%=
注意:只有变量才可以使用该运算符,常量不可以使用。
12.4自增自减运算符
- 自增:++
- 自减:--
注意:
- 如果单独使用,[前置++]和[后置++]没有任何的区别。
- 如果混合使用,[前置++]先+1,然后使用变量加1之后的值,[后置++]先使用变量原来的值,表达式结束时给变量加1.
- 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许修改。
12.5关系运算符
关系运算符有六个:==、!=、<、>、<=、>=,他们的计算结果是true或者是false。
12.6逻辑运算符
逻辑运算符必须与布尔表达式进行搭配使用。
逻辑与&&:
语法规定:
表达式1 && 表达式2,左右表达式的结果必须都是boolean类型的。
代码如下所示:
public class Test13 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a > 2 && b < 30);
System.out.println(a > 2 && b > 30);
System.out.println(a < 2 && b > 30);
System.out.println(a < 2 && b < 30);
}
}
结果如下所示:
特点:
- 有假则假,同真则真。
- 如果表达式1为真,那么就会执行表达式2,如果表达式2也为真,那么整体就为真。
- 如果表达式1为假,那么就不会执行表达式2。
逻辑或 || :
代码如下所示:
public class Test14 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a > 2 || b < 30);
System.out.println(a > 2 || b > 30);
System.out.println(a < 2 || b < 30);
System.out.println(a < 2 || b > 30);
}
}
结果如下所示:
特点:
- 有真则真,同假则假。
- 如果表达式1为假,则判断表达式2,如果表达式2为真则整体就为真。
- 如果表达式1为真,就不会执行表达式2,整体就已经为真了。
12.7短路求值
&&和|||都遵循短路求值的规则。
我们都知道10/0是一个有问题的计算,在运行的时候编译器就会报错。
那么我们就可以以此来清楚短路求值是怎么求值的。
对于&&运算来说:
1.当前者为真时:
代码如下所示:
public class Test15 {
public static void main(String[] args) {
System.out.println(10 > 20 && 10 / 0 == 0);
}
}
结果如下所示:
此时就会发生短路求值。
2.当前者为假时
代码如下所示:
public class Test16 {
public static void main(String[] args) {
System.out.println(10 < 20 && 10 / 0 == 0);
}
}
结果如下所示:
对于||来说:
1.当前者为假时
代码如下所示:
public class Test18 {
public static void main(String[] args) {
System.out.println(10 > 20 || 10 / 0 == 0);
}
}
结果如下所示:
2.当前者为真时
代码如下所示:
public class Test17 {
public static void main(String[] args) {
System.out.println(10 < 20 || 10 / 0 == 0);
}
}
结果如下所示:
12.8位运算符
表示按二进制位进行运算。
- 按位与&:同1为1,有0则0.
- 按位或|:同0为0,有1则1.
- 按位取反~:0变1,1变0。
- 按位异或^:相同为0,不同为1。
12.9移位运算符
- 左移<<:最左侧的一位就不要了,在最右侧补0。
- 右移>>:最右侧位就不要了,在最左侧补符号位(正数补0,负数补1)。
- 无符右移>>>:最右侧位就不要了,最左侧补0。
注意:没有无符号左移!!!
12.10条件运算符
条件运算符又叫三目运算符。
格式:表达式1 ?表达式2 : 表达式3
如果表达式1的结果为真则返回值就是表达式2的值,如果为假则返回表达式3 值。
代码如下所示:
public class Test19 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = 0;
max = a > b ? a : b;
System.out.println(max);
}
}
结果如下所示:
练习题:
说出下面代码输出的结果:
代码如下所示:
public class Test20 {
public static void main(String[] args) {
System.out.println((true == true) ? (true == true) ? false : true : true);
}
}
结果如下所示:
解析:
13.逻辑控制
逻辑控制分为三大结构:
- 顺序结构
- 分支结构
- 循环结构
13.1顺序结构
就是按照代码的顺序来执行。
代码如下所示:
public class Test21 {
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
}
}
结果如下所示:
13.2分支结构
我们一般见到的分支结构的语句有if-else和switch。
if-else:
注意:括号中的结果必须是布尔表达式!!!
代码如下所示:
public class Test22 {
public static void main(String[] args) {
int a = 10;
int b = 20;
if(a > b) {
System.out.println("a > b");
} else if(a == b){
System.out.println("a == b");
} else {
System.out.println("a < b");
}
}
}
结果如下所示:
switch:
代码如下所示:
import java.util.Scanner;
public class Test23 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int input = scan.nextInt();
switch (input) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("周内");
break;
case 6:
case 7:
System.out.println("周末");
break;
default:
System.out.println("输入错误");
break;
}
}
}
结果如下所示:
注意:
- 在switch的括号中的变量不能是long、float、double、boolean!!!
- case后面的常量值不可以重复。
13.3循环结构
循环结构我们知道的有三种:
- while循环
- do-while循环
- for循环
以循环打印1~10数字为例:
while:
代码如下所示:
public class Test24 {
public static void main(String[] args) {
int i = 1;
while(i <= 10) {
System.out.print(i + " ");
i++;
}
}
}
结果如下所示:
do-while:
代码如下所示:
public class Test25 {
public static void main(String[] args) {
int i = 1;
do {
System.out.print(i + " ");
i++;
}while (i <= 10);
}
}
结果如下所示:
for:
代码如下所示:
public class Test26 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
}
}
结果如下所示:
结束语:
这节小编就分享到这里啦!如果想要继续学习Java的同学们及得给小编点赞收藏加关注哦,小编会持续出有关Java方面的知识的,如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)