java基础语法
文章目录
1.常量与变量
在程序设计语言中,对于数据的存储通常会以常量或者变量的形式存在:
常量:不可改变的数据
变量:可以改变的数据
1.1.常量
java中常量的表现形式分为两种:
-
直接量:未经定义直接使用的数据值
//直接量(魔法值) System.out.println(10); System.out.println("不积小流无以成江海,不积跬步无以至千里"); System.out.println(3.14);
-
自定义常量
/**游戏窗体标题*/ public static final String TITLE = "CXK 打篮球?or 打飞机?"; /** 窗体宽度*/ public static final int WIDTH = 450; /** 窗体高度*/ public static final int HEIGHT = 700; /** 隐藏窗口*/ public static final boolean HIDDEN = false; /** 显示窗口*/ public static final boolean SHOW = true;
1.2.变量
在程序中用于存储数据的最基本单元称之为变量,在程序中定义变量本质上就是在向内存申请空间(存储空间),变量的声明语法:
数据类型 变量名称 = [<初始值>]
例子:
//声明整数变量
int i = 100;
String j = "helloworld";
//赋值
i = 200;
i = 5;
1.2.1.变量的分类
java中的变量分为两种表现形式:
- 局部变量:一般在方法中(或分支语句,循环语句块)定义的变量,作用域只能够存在声明区域
- 全局变量:在类结构中直接定义的变量,可以在类的其他方法(非static方法)中任意使用
2.数据类型
数据类型:自然界中任何的事物都可以使用数据表示,只要是数据就存在类型之分,比如:人的年龄一般是整数,描述一个成年人是否结婚使用是或否表示,表示学生的专业以字符串形式表示等。
java是一门强类型语言,即任何的变量在使用之前一定要先经过定义,并且指定其数据类型,另外,在使用期间不能随意更改其数据类型;
java中的数据类型分为两大类:
- 基本数据类型(简单类型)
- 复合数据类型(引用类型)
2.1.基本数据类型
java中对于一些简单数据,比如一个整数,一个小数,一个true或false值,一个字符等这些数据可以使用基本数据类型进行描述。java中的基本类型数据分为四类八种:
- 整数类型
- byte
- short
- int
- long
- 浮点类型(小数类型)
- float
- double
- 字符类型
- char
- 布尔类型
- boolean
2.1.1.整数类型
Java中的整数使用根据定义的数据大小不同使用不同的类型表示,由小到大分为byte<short<int<long
- byte:1字节(1字节=8bit)
- short:2字节
- int:4字节
- long:8字节
//二进制 0 1
//八进制 0 ~ 7
//十进制 0 ~ 9
//十六进制 0 ~ 9 A ~ F
// 0 ~ 255
// 2^7-1~-2^7
byte b = 127;
byte b2 = -128;
short s = 15400;
int i = 10000;
long lon = 12345678901L;
整数类型的使用场景:
- 进行文件的相关读写操作时使用到byte类型
- 对于较大的整数,例如:时间毫秒数,文件的字节总数的表示可以使用long类型
- 其他大部分时间都使用int类型
注意事项:
- java中默认的整数类型为
int
- 对于
long
类型数据的表示一定要在数值末尾使用L
表示
2.1.2.浮点类型
浮点类型即小数类型,一般用于描述一些小数数据,比如体重(65.5),学分(45.5)等;java中的浮点类型分为两个:
- float:4字节
- double:8字节
//对于单精度(float)类型需要在数值末尾使用“f”或"F"
float f = 3.14F;
//
double d = 3.14;
double d1 = 3.141592647;
float d2 = 3.141592647F;
System.out.println(d1);
System.out.println(d2);
注意事项:
避免直接使用
double
或float
表示与金额等敏感数据,由于计算机对浮点数计算精度的导致数据的差异;对于敏感的浮点数运算一般会直接转换为整数,字符串运算或者使用java.math.BigDecimal
进行运算浮点数中包含三个特殊的值
Infinity
、-Infinity
、NaN
System.out.println(10.0/0); //Infinity System.out.println(-10.0/0); // -Infinity System.out.println(0.0/0); // NaN(not a number)
2.1.3.字符类型
java中对于单个的字符可以使用字符类型char
表示,区别于String
,String
用于表示字符串,本质是一个字符序列(字符数组)
- char类型可以用于表示通常意义上的单个字符(一个字母,一个特殊符号,一个中文字符),占据2字节(16位)
char c1 = 'a';
char c2 = 'A';
char c3 = '国';
//ASCII码表
char c4 = 65; //A
//0~65535
char c5 = 60800;
//转义符号
char c6 = '\n';
//unicode码(万国码)
char c7 = '\u0009';
char c8 = '\t';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println("hello"+c8+"world");
//请输出一个 "hello" 符号
System.out.println('"'+"helloworld"+'"');
System.out.println("\"helloworld\"");
// 输出的文件地址:D:\\soft\\java\\apache-maven-3.6.1
System.out.println("D:\\\\soft\\\\java\\\\apache-maven-3.6.1");
// GBK UTF-8 GB2312 GB18030 latin-1 BIG5
// 输出一个学生信息表
/*
学号 姓名 年龄 学分
101 张三 18 60
102 李四 20 34
*/
System.out.println("学号\t姓名\t年龄\t学分");
System.out.println("101\t张三\t18\t60");
System.out.println("102\t李四\t20\t34");
char类型一般常见于字符转码
2.1.4.布尔类型
java中对于一些特殊的数据例如,描述一个成年是否结婚,描述一个状态(存在,不存在)等只有两种取值的数据时可以使用布尔类型;java中的布尔类型使用boolean
,取值只能是true
或false
(C语言中可以使用0或1表示布尔类型
)
布尔类型是所有基本数据类型中最小的数据类型,只占1个二进制位。
boolean b = true;
boolean b2 = false;
注意事项:
- 布尔类型的使用场景一般用于布尔逻辑判断(条件分支语句中)
- 可以使用一个表达式(运算结果为true和false)作为boolean类型的值
String是否是基本类型数据?
String不是基本类型数据,是JDK中定义在
java.lang
包中的一个java类所有的基本类型数据都是小写的英文单词(关键字)
2.2.引用数据类型
以上所了解的基本类型数据可以用于表示一些简单数据(单一的值);但是对于复杂的数据(一个学生,一只狗,一个订单,一个员工)无法通过基本数据类型精准表示;因为这些复杂类型包含的信息很多,比如一个学生(学号,姓名,性别,年龄,生日,专业,学习,玩游戏,谈恋爱),因此,java中提供了用于表示复杂数据的数据类型:引用类型
,java中的引用类型通常是以类的形式存在。
一个引用类型的存在形式如下:
public class Student{
int sno;
String sname;
char sex;
int age;
Date birth;
String major;
public void study(){
}
public void play(){
}
}
Student s = new Student();
2.3.数据类型转换问题(基本类型)
在实际开发中经常会涉及到不同数据类型之间转换问题,java中对于数据类型之间的转换也提供了支持,java中数据类型的转换遵循以下原则:
- 小转大,直接转(隐式转换)
- 大转小,续强转(显式转换)
转换语法格式:
(目标类型)变量名
示例代码:
//1字节(8位)
byte b = 100;
//4字节(32位)
int i = b;
System.out.println(i);
i = 1000;
//强制转换
b = (byte)i;
System.out.println(b);
注意事项;
- java中所有基本类型数据除了
boolean
之外都可以相互转换
3.运算符
在日常的软件项目开发中,多数时候都是在对数据进行操作,而数据的相关操作离不开运算(加减乘除,取余,比较等),因此java中也支持各种运算符:
- 分割符
- 调用符号
- 算术运算符
- 关系运算符
- 布尔逻辑运算符
- 位运算符
- 三目运算
- 其他运算符
名称 | 符号 |
---|---|
分隔符 | 1. 逗号(,)变量之间的分割,数组元素之间分割,参数之间的分割 2. 分号(;)一行语句结束 3. 小括号():方法的声明和调用,类型强转,表达式优先级设置 4.方括号[]:数组的定义 5.花括号{}:语句块的声明 |
元素调用符号 | . :方法调用,属性调用 |
3.1.算术运算符(运算结果为数值)
名称 | 符号 |
---|---|
相加 | + |
相减 | - |
相乘 | * |
相除 | / |
取余 | % |
递增/递减 | ++/– |
案例代码:
int i = 20;
int j = 3;
System.out.println(i / j);
//取余运算
System.out.println(i % j);
//将一个运算的结果控制在 0-9 之间
System.out.println(i % 10);
// System.out.println("a=" + (i++)); // i + 1
// System.out.println("b=" + i);
//请你计算 i++ - --i * j-- + ++j
//20 - 20 * 3 + 3
System.out.println(i++ - --i * j-- + ++j);
注意事项:
- 取余运算,取得两个数相除之后的余数
- 递增递减等同(+1/-1),但是运算符在运算数之前和之后结果存在差异
- 如果运算符在运算数之后,则先使用再运算
- 如果运算符在运算数之前,则先运算再使用
3.2.关系运算符(运算结果为布尔值)
关系运算符一般用于进行数据大小比较,对象的判断之类操作,运算结果通常是布尔类型值,java中的关系运算符主要有以下:
符号 | 说明 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于(比较) |
!= | 不等于 |
int a = 10;
int b = 15;
String c = "hello";
String d = "hello";
System.out.println(a > b);
System.out.println(a < b);
//比较运算符中==和!= 可以用于引用类型之间的比较
System.out.println(c == d);
System.out.println(c != d);
注意事项:
- 比较运算符通常两边的运算数都是数值类型
- 比较运算的结果是布尔类型
==
和!=
可以用于引用数据类型的比较(不推荐)
3.3.布尔逻辑运算(运算结果为布尔值)
布尔逻辑运算符一般用于对关系运算或者布尔条件判断
符号 | 说明 |
---|---|
& | 与运算 |
| | 或运算 |
&& | 短路与 |
|| | 短路或 |
! | 非 |
int i = 10;
int j = 5;
int k = 3;
boolean b = i < k & i > j++; // false & true
System.out.println(b);
System.out.println(j);
boolean b2 = !(i > j);
System.out.println(b2);
面试题:
- &和&&什么区别?
&:用于对运算符左右两侧的表达式进行与运算,无论运算符左边的表达式是否为true,运算符右侧表达式始终会执行
&&:相对上述符号的区别在于,一旦运算符左侧的表达式为false,则右侧表达式将不再执行(短路)
3.4.位运算符
计算机中底层的所有运算都会转换成二进制位进行计算,
符号 | 说明 |
---|---|
& | 与(1 & 0 = 0、1&1=1、0&0=0) |
| | 或(1|1=1、0|1=1、0|0=0) |
~ | 取反(0->1 1->0) |
^ | 异或(1^1 = 0、01=1、00=0) |
>> | 右移 |
<< | 左移 |
>>> | 无符号右移 |
int i = 5;
int j = 6;
System.out.println(i + j);
// 1010101010
int n = 8;
System.out.println(n/4);
System.out.println(n-6);
//0000 1000
// 1*2^3 + 0*2^2 + 0*2^1 +0*2^0
// 8 4 2 1
// System.out.println(n >> 2);
// System.out.println(n << 3);
System.out.println(~n);
笔试题:
- 如何快速将8运算变成2
//将8转换为成为二进制:1000 //将二进制数右移两位:0010即可 System.out.println(8 >> 2);
3.5. 三目运算
三目运算符语法:
布尔表达式 ? 表达式1 : 表达式2;
基础案例
int age = 19;
//未成年人禁止入内
//大爷,来玩吧
String msg = age >= 18 ? "大爷,来玩吧":"未成年禁止入内";
System.out.println(msg);
复杂的使用方式
/**
* 有一家网店,专卖内衣
* 购买的数量<5 原价出售
* 购买的数量 [5,10) 则打9折
* 购买的数量是 [10,20), 打8折
* 购买>=20 打6折
* <p>
* 单价5元,现在购买15件,请问需要多少钱?
*
* @author mrchai
* 2021/7/5
*/
public class Demo1 {
public static void main(String[] args) {
//总购买数
int count = 30;
//单价
double price = 5.0;
double result = count < 5 ? count * price : count < 10 ?
count * price * 0.9 : count < 20 ? count * price * 0.8 : count * price * 0.6;
//ctrl+alt+L 格式化代码
System.out.println("总价:" + result);
}
}
3.6.其他运算符
符号 | 说明 |
---|---|
+=、-=、*=、/= | 扩展赋值运算 |
+ | 字符串拼接运算 |
int i = 10;
i += 10; // i = i + 10
System.out.println(i);
i*=10;
System.out.println(i);
// short s = 10;
// s = s + 10; // 编译错误,处理方式: s = (short)(s + 10);
// s += 10; //包含类型隐式转换,正常运行通过
//java中任何变量和字符串相加都会自动将+符号识别字符串拼接
System.out.println(10 + 20 + 30 + "40"); //6040
System.out.println("10" + 20 + 30 + 40);
String name = "wade";
//调用符号“.”
int len = name.length();
System.out.println(len);
3.7.运算符优先级
java中所有的运算符在运行期间都有不同的优先级,但是所有的优先级问题都可以通过()
解决!