JAVA语言基础

本文详细介绍了Java语言的基础知识,包括JVM、JRE、JDK的组成,字节码概念,解释型与编译型语言的区别,以及Java与C++的对比。此外,还深入讲解了Java的第一个程序HelloWorld的编写,环境变量配置,数据类型,运算符,键盘输入,循环结构,方法,数组,以及随机数的生成。内容全面,适合初学者入门。
摘要由CSDN通过智能技术生成

计算机基础

JAVA引入

1.JAVA语言平台版本

  • J2SE标准版
  • J2ME小型版
  • J2EE企业版

2.JAVA语言特点

  • 简单易学
  • 面向对象
  • 支持多线程(内置多线程机制)
  • 支持网络编程且方便
  • 可靠,安全
  • 编译与解释并存
  • 跨平台(跨操作系统)
    在这里插入图片描述

3.JVM+JRE+JDK

  • JVM
1.运行字节码的虚拟机
2.针对不同的系统有不同实现,目的是使用相同字节码在不同平台得到相同结果
3.只需要满足JVM规范可自定义JVM(HotSpot VM是JVM的实现)
  • JRE
1.Java运行环境,运行已编译的程序,不可创建新程序
2.JRE=JVM+JAVA程序所需的核心类库
  • JDK
1.Java Development Kit
2.功能齐全的Java SDK
3.JDK=JRE+大量开发工具包
4.提供给JAVA开发员使用,创建和编译程序

4.字节码

  • JVM可理解的代码,后缀为class的文件
  • 字节码只面向JVM,不面向特定的处理机,即在一定程度上解决解释型语言效率低的问题,又保留解释型语言可移植的特点
  • 由于字节码不面向特定虚拟机,所以无需重新编译可在不同OS计算机上运行

5.解释型语言+编译型语言

  • 解释型
1.通过解释器逐行的解释源代码为机器码后执行
2.执行速度慢,开发效率高
  • 编译型
1.通过编译器一次性将源代码翻译成机器码
2.执行效率高,开发效率低
  • JAVA解释与编译并存
通过编译器生成字节码
通过解释器解释执行字节码

6.Java与C++

  • 二者都面向对象
  • C++支持运算符重写
  • C++支持多继承
  • C++支持直接手动访问内存
  • Java支持自动内存管理垃圾回收机制

第一个程序—HelloWorld

1.基本框架

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

2.详解

  • Java程序的最基本单位是类,所以我们要定义一个类
格式:class 类名
  • 在类中写内容的时候,用大括号括起来 {}
  • Java程序要想执行,必须有main方法
public static void main(String[] args)
  • 要指向那些东西,也用大括号括起来
  • 要做什么?仅做一个简单的输出
System.out.println("HelloWorld");
	 注意:""里面的内容是可以改动的

3.程序解析

  • 编写java源程序(.java)
  • 编译:javac 源文件名.java
  • 运行:java 源文件名

4.常见问题

  • ①扩展名隐藏
解决办法:
	此电脑-工具-文件夹选项-查看-去除隐藏文件名的勾
  • ②要求文件名与类名一致
  • ③java语言严格区分大小写
  • ④标点符号必须全是英文状态
  • ⑤括号配对问题:成对

环境变量的配置

1.Path

  • 作用
保证javac命令可以在任意目录下运行
	原来外部指令javac只能在JDK安装目录bin下运行
  • 配置方案
找到环境变量的位置——在系统变量中——新建
	变量名:JAVA_HOME
	变量值:D:\develop\Java\jdk1.7.0_60
找到环境变量的位置——在系统变量中——修改
	变量名:Path
	变量值:%JAVA_HOME%\bin;
		%XXX%:引用
		注意;与原来的内容隔开

2.classpath

  • 作用
保证class文件可以在任意目录下运行
	原来只能使用绝对路径下运行class文件
  • 配置方式
找到环境变量的位置——在系统变量中——新建
	变量名:classpath
	变量值:E:\java程序

Java基础语法

1.关键字

  • 概述:被JAVA语言赋予特定含义的单词
  • 特点:字母全部小写
  • 注意:goto和const是保留字
    高级记事本对关键字有不同颜色的标记
    在这里插入图片描述
    在这里插入图片描述

2.标识符

  • 概述:起名字时使用的字符序列
  • 组成规则:英文大小写字母,数字字符,$,_
    注意
1.不以数字开头
2.不能是java关键字
	new是一个关键字,关键字都是小写
	true,false,null不是关键字,只是字面量,但也不能成为标识符
3.严格区分大小写
  • 常见命名规则——见名知意
1.包:就是其文件夹,用于将类型区分开来 
	com.公司.2.类或接口:
	一个单词:单词首字母大写   One
	多个单词:每个单词首字母大写   OneTwo
3.方法或变量
	一个单词:小写   one
	多个单词:第二个单词开始首字母大写   oneTwo
3.常量:都大写,不同单词用_隔开   ONE_TWO

3.注释

  • 概述:解释说明程序的文字(养成习惯)
  • 注释分类
1.单行注释:行最前加//
2.多行注释:/* */(不可嵌套使用)
3.文档注释:/** */(被javados工具解析生成一个2说明书,面向对象部分讲解)
  • 程序中的注释(以HelloWorld为例)
1./*需求 分析 实现*/
2.//这是我的HelloWorld案例
  • 作用
1.解释说明程序,提高程序的阅读性
2.帮助调试程序,报错时分部注释再编译运行
  • 形成注释思想
先写注释,体现思路
再写代码,实现思路
  • 编译器生成字节码前会将注释抹去,所以字节码中不含注释

4.常量与变量

  • 常量
1>:字面值常量	 
	 - 字符串常量(用“”括起来的内容)
	 - 整数常量
	 	四种表现形式:二,八,十,十六进制
	 - 小数常量
	 - 字符常量(用‘’括起来的内容)
	 - 布尔常量(true false- 空常量(null2>:自定义常量
定义:在一定范围内发生改变的量
定义格式:数据类型 变量名 = 初始值;

5.数据类型

  • Java语言是强类型语言(对每一种数据都定义具体的数据类型)
  • 每种类型定义了不同大小的内存空间,所占空间大小不随硬件变化而变化,注意不要超过数据范围
    在这里插入图片描述
  • 后缀
long型在值后加上L后缀
float型在值后加上F后缀
  • 类型转换
默认转换:byte,short,char->int->long->float->double
	byte,short,char参与运算时先转int
		--->有小类型先转成大类型,再参与运算
	boolean不参与转换

强制转换:目标类型 变量名 = (目标类型)被转换的数据
	大->小
	不要随意使用强制转换,隐含精度损失问题

在这里插入图片描述

  • 思考题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 常见ASCLL码表

'a':97
'A':65
'0':48

在这里插入图片描述

6.运算符——不过多讲解

  • 算术运算符(+ - * / % ++ – + - )
整数相除只可以得到整数,只要将任意一个操作的数据变成浮点数,即分子或分母乘1.0即可得到小数

单目运算符
	1.++在前先++再执行——++在后先执行再++
	2.++-- 的运算对象可以为char型变量、int型变量和float型变量
	3.常量不可以使用  10++

+的含义
	1.加法
	2.正号
	3.字符串拼接符
  • 赋值运算符(= += -= *= /= %=)
    在这里插入图片描述
  • 比较运算符(== != > >= < <=)
1.比较的结果都是boolean类型
2.区分===,不能混写
3.字符串值的比较不能使用==   而要用equals()
 	==对象的比较不管数值相不相同,对象相同即可
		String a1 = "a1";
		String a2 = "a2";
		a1==a2;   ===ture

		String a1 = new String("a1");
		String a2 = new String("a2");
		a1==a2  ===false
  • 逻辑运算符
特点:一般用于连接Boolean类型的表达式或值

1.&()——全对即true
2.|()——一对即true
3.^(异或)——不同即true(男女),相同即false(男男,女女)
4.!()
	!true=false!false=true
		1>!后面要接一个boolean类型的表达式
		2>int类型不能取非,取非的结果必须是Boolean类型
	偶数个不改变本身
5.&&(双与)
	双与具有短路效果,左边是false,右边不执行
	左右的表达式结果为boolean类型
6.||(双或)
	双或具有短路效果,左边是true,右边不执行
	左右的表达式结果为boolean类型
	
开发中常用&& || !
	——优先级:!  &&   ||
  • 位运算符
直接对二进制的运算,参与运算的都是补码


1.&()——有00
2.|()——有11
3.^(异或)——相同则0,不同则1
	特点:一个数据针对另一个数据位异或两次,该数不变
		a^b^b=a     a^b^a=b
4.~(取反)——01,10
5.<<(左移)——左边最高位丢弃,右边补齐0
		快速计算结果:数据*2^移动次幂
			1000<<2
			100000
6.>>(右移)——最高位是0,则左边补0
			最高位是1,则左边补1
		快速计算结果:正数:数据/2^移动次幂
			1000>>2
			10
7.无符号右移(>>>)——无论最高位是0还是1,左边补齐0

在这里插入图片描述
在这里插入图片描述

  • 三目运算符
比较表达式?表达式1:表达式2
	计算表达式的值(Boolean类型的值)
		若是true,表达式1就是结果
		若是false,表达式2就是结果
			比较表达式最好加上()

在这里插入图片描述

  • 优先级(从高到低)
括号 ()[]
正负号 +-
自增,自减,非 ++--!
乘除,取余 */%
加减 +-
移位运算 <<>>>>>
大小关系 >>=<<=
相等关系 ==!=
按位与 &
按位异或 ^
按位或 |
逻辑与 &&
逻辑或 ||
条件运算 ?:
赋值运算 =+=-=*=/=%=
位赋值运算 &=|=<<=>>=>>>=

7. 键盘录入的基本格式

  • 1.导包
格式:import java.util.Scanner;
位置:在class上面
  • 2.创建键盘录入对象
格式:Scanner sc = new Scanner(System.in);
	通过对象获取数据
  • 3.接收数据
整数:int x = sc.nextInt();
浮点型:double x = sc.nextDouble();
字符串:String s = sc.nextLine();
  • 注意
1.输入语句中若先输入字符{}型再进行整数的输入,整形输入完后末尾的空格保存到字符串类型中
2.解决该类问题的办法
	方法一:先写字符串类型再写整数型
	方法二:整数型输入语句下加上 sc.nextLine() 再进行字符串类型的输入

8.语句

  • 顺序结构
程序中最简单最基本的流程控制
按代码的先后顺序,依次执行

在这里插入图片描述

  • 选择结构
    在这里插入图片描述
if语句
	1.关系表达式的结果是Boolean类型
	2.三目都可以用if改,但if不一定都可以改成三目
		当if语句控制的操作是一个输出语句的时候,不可以使用三目,因为三目是一个运算符,运算符操作完后应该有一个结果,而不是一个输出

在做一个程序时一定要考虑正确数据,错误数据,边界数据	

在这里插入图片描述

switch语句	
	面试题:switch语句的表达式可以是byte?可以是long?可以是String?
		答:可以,不可以,JDK7以后可以
	
	注意事项
		1.switch(不能是浮点型)
		2.case后面只能是常量,不能是变量,而且多个case后面的值不能出现相同的
		3.default可以省略吗?
			答:可以省略,但是不建议,因为它的作用是对不正确的情况给出提示
		4.break可以省略吗?
			答:可以省略,但是结果可能不是我们想要的
			    会出现一个现象:case穿透
		5.default一定要在最后吗?
			答:不是,可以在任意位置。但是建议在最后,不论defaultcase前还是后都先执行case
		6.switch语句的结束条件?
			遇到break就结束了
			执行到末尾就结束了
			**注意default不是结束标志

switchif的使用场景
	if
		结果是boolean类型
		对一个范围的判断
		对几个常量的判断
	switch
		对几个常量的判断
  • 循环结构
所有的循环语句中条件语句返回的都是Boolean类型

在这里插入图片描述

for循环:
	*执行流程*
		1.执行初始化语句
		2.执行判断条件语句——true则继续执行,false则结束循环
		3.执行循环体语句
		4.执行控制条件语句
		5.返回到第二步
	*注意事项*
		1.不论判断条件语句是简单还是复杂,结果都是boolean类型
		2.循环条语句若只有一条,可以省略大括号,但不建议
		3.有分号就没有左大括号,有左大括号就没有分号(不要随意的在for()后加;4.for(int x=1; ; ) 此时X只在次循环中作用

增强for循环(底层自己做一个判断,解决数组长度溢出问题)
	for(元素数据类型 变量:数组名){}		
	注意
		1.只能用于输出 不能输入,一次性将所有的元素都遍历完成
		2. :后数组或集合不能为空null
	二维数组的遍历
		for(int[] aa:arr){
			for(int a:aa){
				System.out.print(a+"\t");
			}
			System.out.println("");
		}

在这里插入图片描述

while循环
	先执行()中的,不论结果有没有进入循环体()中的内容都被执行
	forwhile可以等价转换
		for适合一个范围的判断
		while适合循环次数不明确的数

在这里插入图片描述

dowhile循环
	先执行一次循环体
综上可知三种循环是可以统一的
	与前两种循环的区别
		1.do……while循环至少执行一次循环体
		2.forwhile先判断条件再决定是否执行循环体
	注意
		1.注意修改控制条件,否则容易出现死循环
			while(true){……}
			for(;;){……}
		2.优先考虑for,再while,最后do……while
  • 控制跳转语句
break 中断
	1.用在循环和switch语句中,离开此场景无意义
	2.作用
		跳出单层循环
		跳出多层循环,需要标签语句的配合
			标签名:for(){break 标签名;}
continue 继续
	1.用在循环中,离开此场景无意义
	2.作用
		跳出单层循环一次(但可以进行第二次循环)即结束此次循环,开始下一次循环
return 返回
	1.用于结束方法
	2.一旦遇到return,程序就不会再继续往后执行
  • 输出语句
换行:System.out.println();
	可以通过输出空语句实现换行System.out.println();
不换行: System.out.print();

输出语句中字符相加+表示数值(字符转换成表中对应数字)加法     字符+=”中加号表示字符串拼接符
> char c = '\u0061';//a 
> char d = '银'; 		
> 输出语句中
> (c+d)//38231  
> (c+""+d)//a银

> char a='2'; 
> char b='3'; 		
> 输出语句中
> (a+b+"")//101    
> (a+""+b)//23  
> (""+a+b)//23   
> (""+(a+b))//101

9.方法

  • 方法就是完成特定功能的代码块
  • 返回值是该代码块的执行结果
  • 格式
    在这里插入图片描述
  • 注意事项
方法不调用不执行时无意义
方法与方法是平级关系,不可嵌套
方法定义时参数与参数用逗号隔开
方法调用时不用再传递数据类型
方法有返回值,一定要有return
  • 方法重载
针对方法的功能相同,但参数列表不同(参数个数或参数类型不同)的情况,JAVA允许他们用一样的名字

特点
	1.与返回类型无关,只看方法名和参数列表
	2.在调用时,虚拟机通过参数列表的不同来区分同名方法

10.数组

  • 概念
1.存储同一种数据类型多个元素的集合
2.数组既可以存储基本数据类型,也可以存储引用数据类型
  • 数组操作的常见问题
1.数组索引越界异常:访问了不存在的索引
2.空指针异常:数字已不在指向堆内存,但却还在用数组名去访问元素
  • 数组初始化
概述
	1.Java中数组必须初始化后才可以使用
	2.初始化就是为数组中的元素分配内存空间,并为每个数组元素赋值

初始化方式
	1.动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
	2.静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
	3.两种初始化不可同时存在

在这里插入图片描述

  • 一维数组
1.格式
	数据类型 [] 数组名 		
		int[] a;定义一个int类型的数组a变量(推荐) 	
	数据类型 数组名 [] 		
		int a[];定义一个int类型的a数组变量

2.初始化
	动态初始化
		格式:数据类型[ ] 数组名 = new 数据类型 [数组长度]
	静态初始化
		格式:数据类型[ ] 数组名 = new 数据类型 []{元素1,元素2...}

3.数组长度:数组名.length
  • Java内存图解
  • 一维数组内存图解
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 数组遍历
    在这里插入图片描述
  • 数组获取最值
    在这里插入图片描述
    在这里插入图片描述
  • 数组逆序
    在这里插入图片描述
    在这里插入图片描述
  • 数组赋值
1.直接赋值
	int []arr = {1,2,3}int []arr2 = arr;
		即两个引用名指向同一个对象(地址值相同),当arr(arr1)数组中某个值改变时,arr1(arr)中**对应的值也改变**

2.创建一个同长的数组再循环赋值
	当arr(arr1)数组中某个值改变时,arr1(arr)中**对应的值不改变**

3.使用Object中的clone()函数
	int []arr1 = arr.clone()
		当arr(arr1)数组中某个值改变时,arr1(arr)中**对应的值不改变**

4.使用System中的arraycopy(原数组,原数组起始位置,目标数组名,目标数组起始位置,复制元素个数)  函数
	System.arraycopy(.......)
  • 二维数组
1.二维数组就是元素为一维数组的数组

2.初始化
	动态初始化
		数据类型[][]变量名 = new 数据类型[m][n](推荐)
				m:表示二维数组有多少一维数组  有几行
				n:表示每一个一维数组有多少元素  有几列
		数据类型[][]变量名 = new 数据类型[m][]
		数据类型 变量名[][] = new 数据类型[m][n]
		数据类型[]变量名[] = new 数据类型[m][n]
	静态初始化
		数据类型[][]变量名 = new 数据类型[][]{{元素1...}{元素1...}...}
		简单化:数据类型[][]变量名 = {{元素1...}{元素1...}...}

3.长度
	行长:数组名.length
	列长:数组名[行下标].length

11.随机数

import java.util.Randon;
Randon rd = new Random();
rd.nextInt()——返回的是int范围内的随机数
rd.next(100)——随机产生[0,100)间的随机数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值