Java基础--Java基础语法

一.Java基础入门

Java语言介绍,用途

1995年詹姆斯·高斯林

JavaSE:基本语法+电脑桌面软件
JavaME:手机软件
JavaEE:互联网上网站的服务器

Java开发环境

JDK:Java开发工具。包括JRE和开发环境
JRE:Java运行环境。包括JVM和核心类库
JVM:Java虚拟机,语言的执行者。

Java语言的跨平台性

1)针对不同的操作系统,我们安装的是不同的JVM
2)不同系统上的JVM都可以运行Java语言
3)所以我们的Java语言可以运行在任何操作系统平台上

DOS命令

调出命令行窗口:window + r,然后输入cmd回车
常用命令如下:
盘符: 表示切换盘符
cd 目录 表示进入目录
dir 表示查看当前目录内容
cd… 表示退回上一级目录
cd\ 表示回退上一级目录
cls 表示清屏
exit 表示退出关闭窗口

配置环境变量

JAVA_HOME
PATH

Java入门代码

public class HelloWorld{  
	public static void main(String[] args){   
		System.out.println("HelloWorld!");  
	}
} 

注释

文档注释: /** */
多行注释: /**/
单行注释: //

关键字

关键字是Java语言特殊使用的单词,有固定的用法和写法.
标识符:是开发者编写代码中使用到的一些单词.

用户使用的标识符不能是关键字.
标识符由字母,数字,下划线,美元符号$组成,不能以数字开头

常量

整数常量
小数常量
字符常量
布尔常量
字符串常量
空常量

二.变量,数据类型

计算机存储单元

计算机是可以用来存储数据的,但是无论内存还是硬盘,计算机存储设备的最小信息单元叫"位(bit)",我们又称之为"比特位",通常用小写字母"b"表示.
而计算机中最基本的存储单位叫"字节(byte)",通常用"B"表示,字节由连续的8个位组成.
存储单位换算
1 B = 8 bit
1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB

变量的介绍

变量:在程序运行过程中可以改变的量.
声明变量:程序向计算机申请一块存储空间,以便存放对应的值.

声明变量的格式:
数据类型 变量名;
数据类型 变量名 = 初始值;
数据类型:对数据的归类.
变量名:用户使用的标识符
标识符由[字母,数字,下划线,美元符号$]构成,不能以数字开头,不能使用关键字.

8种基本数据类型

Java数据类型有两种:基本数据类型和引用数据类型
八种基本数据类型(四类八种):
整数类型:byte,short,int,long
小数类型:float,double
字符类型:char
布尔类型:boolean

标识符

标识符:是开发者编写代码中使用到的一些单词.
​标识符命名规则:

  1. 必须由大小写英文字母(a-zA-Z), 数字(0-9), 下划线(_), 美元符($) 组成
  2. 不能以数字开头
  3. 不能是Java中的关键字.

Java语言标识符的命名规范

写代码必会遇到各种神坑!!!
所以Java开发领域的前辈大神们总结出了可以避免遇到各种坑的经验.
其中一个与标识符有关的防坑经验如下:如果一个标识符由多个单词组成,例如 mynumberscore
把每个单词的首字母大写,这种写法叫做"大驼峰"命名法
​例如 类名:MyNumberScore , Student
​把第一个单词首字母小写,其余单词首字母大写,这种写法叫做"小驼峰"命名法
​例如 变量名和方法名: myNumberScore , student

数据类型转换

自动类型转换

1.常量赋值给变量
2.自动类型转换
取值小的类型自动转换为取值范围大的类型.也就是小范围到大范围变量是自动转换的.满足byte->short->int->long->float->double,其中char类型的变量可以直接自动转换给int类型的变量.

强制类型转换

数据类型 变量名 = (数据类型) 被转换数据值
浮点型转换成整形,直接截断小数点,保留整数部分,可能造成数据丢失
大范围类型转换成小范围类型的变量,可能造成数据损失

表达式的自动类型提升

1.范围小的类型向范围大的类型提升,byte,short,char运算时是直接提升为int的.
2.表达式的最终类型由表达式中的最高数据类型决定

ASCII码表

字符数值
‘0’48
‘9’57
‘A’65
‘Z’90
‘a’97
‘z’122

三.运算符

算术运算符

±*/%

赋值运算符

符号作用说明
=赋值a = 10;将10赋值给变量a
+=加后赋值a += b;等于a = a + b;将a+b的值赋值给变量a
-=减后赋值a -= b;等于a = a - b;将a-b的值赋值给变量a
*=乘后赋值a *= b;等于a = a * b;将a × b赋值给变量a
/=除后赋值a /= b;等于a = a / b;将a ÷ b赋值给变量a
%=取余后赋值a %= b;等于a = a % b;将a ÷ b的余数赋值给变量a

自增,自减运算符

假设有 int k=1; int f=0;
++ 表示自增,两种用法
​  f = ++k; 表示变量先自增1,k值为2,再使用2这个值 给f,所以k是2,f是2
​  f = k++; 表示先使用值1给f,值1使用之后变量k再自增1,所以k是2,f是1
– 表示自减,两种用法
​  f = --k; 表示变量先自减1,k值为0,再使用0这个值 给f,所以k是0,f是0
​  f = k–; 表示先使用值1给f,值1使用之后变量k再自减1,所以k是0,f是1
自增自减规律总结:
在前:先运算,再使用值 在后:先使用值,再运算
一句话: 在前先运算,在后后运算.

关系运算符

也称比较运算符,运算结果为布尔常量.
> 大于 例如 2>1 结果是 true
>= 大于等于 例如 2>=1 结果是 true < 小于 例如 1<2 结果是 true
<= 小于等于 例如 1<=2 结果是 true
== 等于 (注意:不要写成=,一个=是赋值运算) 例如 3==3 结果是 true
!= 不等于 例如 1!=2 结果是 true

逻辑运算符

逻辑运算符
&
|
!
异或^
短路与||
短路或&&

短路逻辑运算符符号有2个, 分别是 && 和 ||
​&& 且(并且) 功能同 &  || 或(或者) 功能同 |
不同之处在底层执行原理:
​  一个false且谁结果都是false, 所以 false && 谁 运算不会运算右侧的谁,提高性能.
​  一个true或谁结果都是true, 所以 true || 谁 运算时不会运算右侧的谁,提高性能.
  一句话总结:短路运算时: false&&右侧不执行,true或右侧不执行;其余情况也是左右都执行;
  实际开发中都用 &&和|| ,几乎不使用 &和|

三元运算符

三元(三目)运算符可以根据条件来选取一个值.
语法格式:
  布尔值 ? 值1 : 值2; 其中 ?和:是固定格式
​解释:根据布尔值条件,为true时选取值1使用,为false时选取值2使用;
​注意:值1和值2可以是任何数据类型;三元运算符运算结果就是这种数据类型的值.(值1和值2类型必须保持一致)

数据输入

Scanner工具类

  1.导入工具类(告诉我们的程序,我现在准备要使用Scanner这个工具类了)  import java.util.Scanner;
​  2.创建对象(创建一台扫描器,扫描系统输入)  Scanner sc = new Scanner(System.in);
​  3.扫描输入数据(等待用户输入数据时,扫描器就可以扫描取得用户输入的数据)
​   int k = sc.nextInt(); //扫描用户输入的一个整数,遇到回车或空格时扫描结束,并返回扫描到的整数
​   String s = sc.nextLine();//扫描用户输入的一行字符串,遇到回车时扫描结束,并返回扫描到的字符串

分支语句

if语句

格式一

格式:

if(布尔条件) 条件语句;

只有当布尔条件为true时,条件语句才会执行;
注: 当条件语句大于一条时,必须用大括号括起来,实际开发中,条件语句无论几条,都推荐用大括号括起来.

if(布尔条件){
	条件语句1;
	条件语句2;
}

格式二

格式:

if(布尔条件){
	满足条件的语句;
}else{
	不满足条件的语句;
}

解释:
​  当布尔条件为true时,执行满足条件的语句;
​  当布尔条件为false是,执行不满足条件的语句;
​用途:满足条件时执行一种语句,不满足条件时执行另一种语句的场景.
​注意:else可以省略,省略之后就是格式一

格式三

格式:

if(条件语句1){
	满足条件1的语句;
}else if(条件语句2){
	满足条件2的语句;
}else if(...){
	...
}...
else if(...){
	...
}else{
	所有条件都不满足的语句;
}

解释:
​  当布尔条件1为true时,执行满足条件1的语句;
​  当布尔条件1为false时,并且当布尔条件2为true时,执行满足条件2的语句;
​  当布尔条件1为false时,并且当布尔条件2为false时,执行所有条件都不满足的语句;
​用途:判断条件大于两种有多种情况时的场景.
​注意: if(){}必须有一个,else{}只能有一个或者零个,其中 else if(){} 可以有任意个;

switch语句

格式:

switch(判断值){
	case 目标值1:
		条件语句1;
		break;
	case 目标值2:
		条件语句2;
		break;
	...
	default:
		默认条件语句;
		break;			
}

解释:
  判断值是一个表达式,表达式的结果值类型只能是byte,short,char,int,String; 常使用int类型
​  表达式:最终结果是一个值的数学运算.
​    例如: 假设有 int a=1;则表达式举例: a , a+1, a++ , a-- , a/2
​  case 目标值: 目标值只能是常量,类型和判断值必须一致; 如果目标值匹配到判断值,则该case的条件语句执行;
​  break: 代码一旦执行了某个switch中的一个break,则结束该switch结构.
​  default: 如果所有目标值都不匹配判断值,则会执行default的默认条件语句.
注意:
​  default 放在 case前后都可以,default执行顺序是的所有case之后,实际都放在最后位置,因为default语句是switch结束前的最后一个语句,所以default中的break可以省略.
​  多个case执行从上向下执行.

switch语句的穿透性

如果一个case匹配执行,且没有break,则会继续向下直接执行所有case语句,直到遇到break来结束switch…这情况叫做switch语句的case穿透.

循环结构

for循环

格式:

	    for (初始化;条件判断;步进) {
	​        循环体;
	​    }

解释:
​  1) 初始化语句 声明变量或变量赋值语句 例如 int i=1; j=0;
​  2) 条件判断 值为布尔类型的表达式, 为true则执行循环体;为false则结束for循环结构体 例如 i<=5
​  3) 循环体 重复执行的任意程序语句 例如输出语句 System.out.println(i);
​  4) 步进 变量赋值 语句 例如 i=i+1; i+=1; i++; i–; i=i+2; i+=2;
执行流程:
​  1) 初始化 首先执行一次初始化
​  2) 条件判断 布尔值 为true则执行循环体;为false则结束for循环结构体
​  3) 循环体 重复执行的任意程序语句, 循环体执行之后则执行步进
​  4) 步进 变量赋值 语句, 步进执行之后必执行条件判断
注意:
​  初始化语句只能执行一次;
​  只有条件判断为true时才执行循环体,循环体之后必是步进,步进之后必是条件判断;
​  只有条件判断为false时才能结束循环(所有循环结束都只有这一条路);
其它了解:
​  for循环中的 初始化,条件判断,步进都可以为空;
​  实际开发条件判断不会写为空,因为条件判断不写会认为是true,然后一直永不停止的重复执行循环体,这被称为无限循环(死循环); 开发中出现死循环就等于代码出错了,要避免死循环现象发生!
​  例如:

	for(;;){
	​	System.out.println("我会一直输出,永不停止");//死循环一直执行下去
	}

使用场景:已知循环结束条件的使用场景

while循环

while循环和for循环一样,作用也是重复执行某个代码块(循环体).
格式:

	while (条件判断) {
​		循环体;
​	}

执行流程
​  1)条件判断,如果为false直接结束while结构,如果为true则执行循环体;
​  2)循环体执行完必执行条件判断
注意:
​  只有条件判断为true时才执行循环体,循环体之后必是条件判断;
​  只有条件判断为false时才能结束循环(所有循环结束都只有这一条路);
使用场景:未知循环结束条件的使用场景

do_while循环

do_while和while循环非常相似,唯一的区别是 do_while会先执行一次循环体之后,再做条件判断.
格式:

	do{
		循环体
	}while(条件判断);	

执行流程
​  1)条件判断,如果为false直接结束while结构,如果为true则执行循环体;
​  2)循环体执行完必执行循环条件
注意:
​  只有条件判断为true时才执行循环体,循环体之后必是条件判断;
​  只有条件判断为false时才能结束循环(所有循环结束都只有这一条路);

break和continue关键字

break: java的一个关键字,可以出现在 条件语句switch和所有循环结构中;
​  条件语句switch结构中,表示结束switch条件结构的执行.
​  循环语句for, while, do while结构的循环体中,表示结束所在循环结构的执行.
continue: java的一个关键字,出现在所有循环结构中;
​  循环语句for,while,do while结构的循环体中,表示结束所在循环本次(本层)的执行.
区别:
​  break:执行效果等效于条件判断为false,结果是直接结束循环;
​  continue:执行效果等效于循环体执行完毕.结果是执行循环体结束时的下一步.
​for的循环体执行中遇到continue,则执行步进
​while循环体执行中遇到了continue,则执行条件判断

随机数生成器

Random工具类

Random是一个随机数生成器工具.
使用步骤(固定用法)
​  1.导包(使用idea工具且配置了自动导包,以后所有导包都可以省略了)
​    import java.util.Random;
​  2.创建随机数生成器
​    Random r = new Random();
​  3.随机生成一个整数
​    int n = r.nextInt(number);//随机生成一个[0,number-1] 即 0到number-1 的整数
​    例如 r.nextInt(10)+1; 会随机生成一个 [0,9]+1=[1,10] 之间的整数
​    例如 r.nextint(6)+5; 会随机生成一个 [0,5]+5=[5,10] 之间的整数

数组

数组的声明定义

数组是存储数据的容器.
​数组的特点是:数组中数据个数固定,容器中数据类型必须一样;
数组声明(定义)格式有2种:
​  1) 数据类型[] 变量名称; 例如 int[] arr1; double[] arr2; String[] arr3;
​  2) 数据类型 变量名称[]; (不推荐使用) 例如 int arr1[]; double arr2[]; String arr3[];
解释:
​  []:表示这个变量是个数组
​  数据类型: 用来指明这个数组中可以存放的数据类型
​  变量名称: 使用一个变量来代表这个数组数据.
​  例如: int[] arr1;表示声明一个变量 arr1,它是一个数组,这个数组中只能存放int类型的元素.

数组的赋值初始化

数组赋值(初始化)格式有2种:
​  1)静态初始化格式: 数据类型[] 变量名称 = new 数据类型[]{元素1,元素2,元素3};
​    简写格式: 数据类型[] 变量名称 = {元素1,元素2,元素3};
​    例如 int[] arr1 = new int[]{1,2,3};
​    可以简写为 int[] arr1 = {1,2,3};
​  2)动态初始化格式: 数据类型 变量名称 = new 数据类型[length];
    例如 int[] arr1=new int[3];
​解释:
​  new:表示创建,为数组开辟内存空间
​  int:数组的数据类型
​  []:代表这是一个数组
​  length: 3代表数组的长度
​  数组的动态初始化只是声明了数组中元素的类型和个数.并未真的赋值,真正的赋值是在后续程序运行中动态进行赋值的.
注意:
​  1)静态初始化[]中不能写长度值,系统会自动判断设置长度值length;动态初始化[]中必须写长度值;
​  2)数组动态初始化时,所以元素没有赋值,但是系统会给每种类型的元素赋予默认值.
​  3)我们可以获取每个数组的长度length属性 例如 arr1.length;可以得到数组arr1的元素个数(长度)
数组元素的每种数据类型默认值:
​  数字类型默认值都是0
​  byte,short,int,long 默认值都是0
​  float,double 默认值都是 0.0
​  字符类型默认值是空格字符
​  char 默认值是 ’ ’
​  布尔类型默认值是false
​  boolean 默认值是false
​  除了八种基本数据类型,其余的引用数据类型默认值都是null
​  比如:String 默认值是 null;
数组元素的访问格式
​  变量名称[index]
​  例如 int[] arr = new int[]{1,2,3};
​  访问 arr[0]是1 , arr[1]是2 , arr[2]是3 .
  注意index只能是 0,1,2
​  注意: 数组的索引index 取值只能是 [0,length-1] .超出范围代码会报错:数组下标索引越界异常

数组的遍历操作

	int[] arr = {1, 2, 3};
	for(int i = 0; i < arr.length; i++){
		System.out.println(arr[i]);
	}	

方法

方法的基本使用

Java方法:可以重复执行的代码片段.(简单的理解就是给某一段代码起个名字叫做方法)  优点:提高代码复用性.
方法声明定义格式(重点确定 返回值和参数):

		public static 返回值类型 方法名(参数){
	​		方法体;
	​	}

方法的调用执行格式(重点确定 方法名和参数值):
​  无返回值: 方法名(参数值); // 本质上等效一段代码
​  有返回值: 数据类型 变量名 = 方法名(参数值); //本质上等效一个值
​  注意: 参数值 位置可以是常量,或者变量;实际开发中一般使用变量.
解释:
​  public: 方法是公共的,谁都可以调用.
​  static: 方法是静态初始化的,不用new对象就可以调用.
​  返回值类型:方法体代码执行结果值类型,特别的void表示方法体执行完毕之后没有返回值.
​  方法名:方法的一个名称,使用小驼峰命名格式的标识符.
​  参数:本质是声明变量,用接收方法体执行时要使用的值.多个参数声明之间用逗号,分割.参数放在小括号内.
​  方法体:可重复执行的代码片段,放在大括号中.
​  如果返回值类型不是void,就必须有 return 结果值;
​  如果返回值类型是void,可以不写return,或者只写return;
注意:
​  实参和形参的区别:
​    实参:调用方法时实际传递的变量;
​    形参:方法定义时声明的变量;
​    实参与形参的数据类型必须一致.但是变量名称没有任何关系.
​  方法调用时都是把实参值传递给形参,但又有所不同(重点记忆):
​    如果是八种基本数据类型:实参传递的是值,形参接收的是值.
​    如果是引用数据类型:实参传递的是对象的地址,形参接收的是对象的地址.

方法重载

方法重载(overload):
​  1.在同一个类中
​  2.方法名相同
​  3.参数的个数,类型,顺序不同
​  4.与返回值类型无关.

值传递

方法调用时, 实参和形参的区别:
​  实参:调用方法时实际传递的变量叫做实际参数;
​  形参:方法定义时声明的变量叫做形式参数;
​实参与形参类型必须一致,名称没有关系.
方法调用都是把实参值传递给形参,但是又有所不同:
​  基本数据类型变量保存值;
  引用数据类型变量保存对象地址;
不同数据类型值特点:
​  八种基本数据类型变量保存和传递的都是值;
  引用数据类型变量保存和传递的都是对象的地址;
简化版: 基本数据类型变量就是个值,引用数据类型变量就是个地址.
方法值传递的底层原理:
​  每个方法都有独立的栈内存来保存变量,每个方法的栈变量互不影响.但是所有方法都共用一个堆内存.所以方法改变堆对象时会互相影响.
底层原理简化版(重点记忆):
​  方法调用,传基本类型互不影响,传引用对象会有影响.

可变参数

JDK5的时候,多了一个新的特性叫做可变参数。
如果一个方法的参数是可变参数,那么可以在该参数位置传递任意个数据。
可变参数格式:

        修饰符 返回值类型 方法名(参数类型... 参数名) {
            方法体;
            return 返回值;
        }
  1. 在调用可变参数的方法时,可以向可变参数位置传递任意个数据
  2. 可变参数的本质就是数组,所以可以将可变参数当成数组去使用
  3. 因为可变参数的本质是数组,所以调用可变参数的方法时,也可以向可变参数位置传递数组。

注意:
  1. 一个方法中最多只能有一个可变参数。
  2. 方法中可变参数必须在最后一个位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值