当前位置: 首页 > news >正文

Java--0基础入门篇【15天】

day-1

jvm–java虚拟机,实现java跨平台
jre–java运行环境,包含jvm
jdk–java开发工具–包含jre

// public:在此处用于限定类名与文件名要一样
// class:定义一个类
// HelloWorld:类名
public class HelloWorld{// public:范围修饰符// static:静态的// void:代表没有返回值// main:方法名// String[] args:参数列表// 该方法为java程序的主方法,一个类里只能有一个主方法,但不是必须的public static void main(String[] args){//输出打印语句,括号里些什么就输出什么System.out.println("HelloWOrld");}
}

安装JDK

JDK11官网下载地址
下载选择本地安装包

下载成功后,双击运行安装包,一路下一步直至完成。如不想安装在c盘,就自行选择安装目录,安装目录不能出现中文字符,默认安装在C:\Program Files\Java路径下。
复制路径:C:\Program Files\Java\jdk-11
在系统搜索框中搜索path
没有找到的,1.设置–系统–系统信息–高级系统设置 2.此电脑–右键–属性–高级系统设置

高级系统设置环境变量

新建系统变量:JAVA_HOME,值为C:\Program Files\Java\jdk-11
在系统变量中找到path,双击进入编辑,新增:%JAVA_HOME%\bin

JAVA_HOME
path

验证

验证java版本
至此jdk安装配置完成。

jdk提供了两个非常重要的命令,java和javac
新建HelloWorld.txt文件,后缀改为java(HelloWorld.java)
将开头的那段代码复制,文件名和类名保持一致
保存,关闭文件
在文件所在目录下打开cmd
javac HelloWorld.java
java HelloWorld
运行成功,打印输出HelloWorld

cmd
文件名和类名要一样
在这里插入图片描述

好了,你已经运行成功你的第一个java程序了,接下来安装ideaidea安装教程

使用idea创建第一个Java项目

新建java项目
新建项目
项目结构
项目本质

基础语法

  1. 注释–对代码的解释说明,不参与编译与运行
    • 单行注释 //注释内容
    • 多行注释 /注释内容/
    • 文档注释 /*注释内容/
  2. 关键字
    特点:
    ①完全是小写的字母
    ②常见的开发软件中会有特殊颜色标识
  3. 常量/字面量–在程序运行过程中,固定不变的量
分类
整数常量1 2 100 -1等
小数(浮点数)1.0 -1.1等
字符常量(有且仅有一个字符)‘1’ ‘,’ ‘你’ ‘a’ 等
字符串常量“你好” " " "a"等
布尔常量true false
空常量null
  1. 变量–程序运行期间,其值可以发生改变的量,一般是用来存储一些数据
  2. 数据类型–分为基本数据类型和引用数据类型
类型解释符号大小(bit)
整数字节型byte1
短整型short2
整型int4
长整型long8
浮点型单精度float4
双精度double8
字符型char2
布尔型boolean1
  1. 标识符–变量,方法或者类取的名字
    ①标识符可以包含英文大小写字母,数字,$和_ 中文也可以(不要用中文)
    ②不能以数字开头
    ③不能是关键字

day-2

类型转换

自动转换

1.概念:由小的数据类型提升为大的数据类型,系统自动完成的
2.规则:数据范围从小到大 byte/short/char --> int --> long --> float – > double
3.整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。

强制转换

1.概念:由大的数据类型转为小的数据类型,系统不能自动完成
2.格式: 目标类型 变量名 = (目标类型)被转换的数据;
3.注意事项:强制类型转换一般不推荐使用,因为可能会发生精度损失,数据溢出

运算符

运算符

|/||:逻辑或,两边都为假时,结果为假
&/&&:逻辑与,两边都为真时,结果为真
|和||的区别:|左边的表达式为真时,右边的式子不予运行,||两边的表达式都会运行。&和&&同理
还有一个’!':取反,!true = false,!false = true
短路了与和短路或

System.out.println(7 > 5 & 5 > 4);//true & true--->true
System.out.println(7 < 5 & 5 < 4);//false & false--->false
System.out.println(7 < 5 & 5 > 4);//false & true--->false
System.out.println(7 > 5 & 5 < 4);//true & false-->false
System.out.println(7 > 5 | 5 > 4);//true | true--->true
System.out.println(7 < 5 | 5 < 4);//false | false--->false
System.out.println(7 < 5 | 5 > 4);//false | true--true
System.out.println(7 > 5 | 5 < 4);//true | false-true
System.out.println(!true);//false
System.out.println(!false);//true
System.out.println(!(5 < 4));//true
System.out.println(7 > 5 ^ 5 > 4);//true ^ true>false
System.out.println(7 < 5 ^ 5 < 4);//false ^ false->false
System.out.println(7 < 5 ^ 5 > 4);//false ^ true-true
System.out.println(7 > 5 ^ 5 < 4);//true ^ false->true

分支语句

if

switch (普通表达式) {
case 值1:
语句体1;
break; case 值2:
语句体2;
break; case 值3:
语句体3;
break; … default:
语句体n+1;
break; // 最后一个break语句可以省略,但是强烈推荐不要省略 }

执行流程: 看表达式的结果和哪个case后面的值相同,就执行那个case后面的语句体,碰到break就结束switch.
如果没有符合要求的case则执行default后面的语句体.

注意事项:
①switch后面小括号当中只能是下列数据类型:

基本数据类型:byte/short/char/int
引用数据类型:String字符串、enum枚举

②switch可以没有default,但是一般都会加上
③case语句后面可以不加break.但是如果不加break就会出现case穿透问题.匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止;

循环

for(初始化语句;比较表达式;步进语句){ 循环体; }
注意事项:for循环的变量在小括号当中定义,只有循环内部才可以使用。
格式:
for (int i = 初始值; i < 末值 ; i++) {
//循环体
}

初始化语句; while(比较表达式){ 循环体; }
看判断表达式的结果,如果为false循环结束,如果为true,则执行循环体.循环体执行完后继续看判断表达式的结果以此类推
格式:
while (循环条件){
//循环体
}

初始化语句; do{ 循环体; }while(比较表达式);
先执行循环体,然后看判断表达式的结果如果为true则继续执行循环体如果判断表达式的结果为false则循环结束,如此反复。
格式:
do{
//循环体
}while(循环条件)

1、for循环和while循环的区别

	for循环的特点:初始化表达式只在当前的循环范围内有效。出了循环的大括号以外,就无法使用了(tips:for循环的初始化表达式,也可以定义在外面)while循环的特点:初始化表达式是定义在循环的外面。出了循环也可以继续使用。

2.do-while循环和for、while循环的区别

	do-while循环会至少先执行一遍循环体。然后再做条件判断而for、while循环都是先判断条件。如果条件满足才执行循环体。如果条件不满足,就直接结束循环

3.使用场景

	一般在循环次数确定的时候,推荐使用for循环一般在循环次数不确定的时候,推荐使用while循环do-while循环很少很少会用到

break用于结束循环,只能出现在循环中或者switch中,continue跳过本次循环,继续下次循环

假如不知道循环结束的条件(死循环如何跳出)

1.标号

lo:while (true){System.out.println("循环");break lo;
}

2.System.exit(0)–等价于停止运行程序,用这个不仅结束了循环,也结束了程序,也就是循环后面写的代码都不执行了。而标号形式的结束循环依然可以继续执行后续代码。

while (true){System.out.println("循环");System.exit(0);
}

键盘录入

//格式:Scanner 变量名= new Scanner(System.in);
System.out.println("请输入一个数字:");
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextInt());

运行结果

生成随机数

获取一个范围在1-10之间的随机数(包含10) r.nextInt(10)+1;
获取一个范围在1-100之间的随机数(包含100) r.nextInt(100)+1;
获取一个范围在20-80之间的随机数(包含80) r.nextInt(61)+20;

Random random = new Random();
int x = random.nextInt(100);//[0-100]之间的随机数

猜数字小游戏

public class Demo04 {public static void main(String[] args) {//	程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?Random random = new Random();int x = random.nextInt(100);//System.out.println(x);lo:while (true) {System.out.println("请输入你猜想的数字:");Scanner sc = new Scanner(System.in);int i = sc.nextInt();if (i > x) {System.out.print("比目标数字大~");} else if (i < x) {System.out.print("比目标数字小~");} else if (i == x) {System.out.print("恭喜你猜对啦");break lo;}}}
}

day-3:一维数组

概念:用来存储一组相同数据类型数据的容器
定义格式

格式一:数据类型[ ] 变量名 //推荐使用
范例:int[ ] array;

格式二:数据类型 变量名[ ]
范例:int array[ ];

初始化

1.动态初始化:数据类型 变量名[ ] = new 数据类型[数组长度];
2.静态初始化:数据类型 变量名[ ] = {值1,值2,…};

数组元素:数组里的单个数据就是一个数组元素
假设有如下数组为例
获取数组的第一个元素“1”,使用:arr[0]
获取数组的第二个元素“2”,使用:arr[1]
以此类推可以获取数组的全部元素
改变数组元素的值,使用:arr[下标] = 值
数组
数组的内存图:数组中的实际数据是保存在堆里的

1.java内存中的几块区域(重要的)

①栈方法被调用的时候都会入栈局部变量都被保存在栈中
②堆new出来的东西都在堆中堆中的东西都有默认初始化值方法区: 源文件编译成字节码文件后存放的区域
局部变量:定义在方法中的变量
数组的实体保存在堆中
数组名实际保存的是数组实体的地址值

数组内存描述图

arr中存储的是数组的首地址,但是因为数组是引用数据类型,打印arr时,会自动调用arr数组对象的toString()方法(后面面向对象讲),默认该方法实现的是对象类型名@该对象的hashCode()值的十六进制值

数组长度的表示:数组名.length

数组的遍历
案例1:从目标数组中查找最大值
int[] arr ={63,68,39,44,8,9,4,15};

public class Arr {/** 思路:* 定义一个变量max,将数组的第一个元素值赋值给max* 遍历数组,用数组中第二个元素开始和max比较* 如果元素值>max,将该元素值赋值给max* */public static void main(String[] args) {int[] arr = {63,68,39,44,8,9,4,15};int max = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i]>max) {max = arr[i];}}System.out.println(max);}
}

案例2:键盘录入5个整数存入数组,求和

public class Add{/** 思路:* 创建Scanner对象* 创建数组对象,长度为5* 定义sum变量用于计算总和* 使用循环录入数组并计算总和* */public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] arr = new int[5];int sum = 0;System.out.println("请输入五个整数:");for (int i = 0; i < 5; i++) {arr[i] = sc.nextInt();sum+=arr[i];}System.out.println(sum);}
}

案例三:在目标数组中查找目标值的索引

public class Index {/** 思路:* 遍历数组* 拿数组中的元素与目标数值进行比较* 找到下标后退出循环* */public static void main(String[] args) {int[] arr = {19, 28, 37, 46, 50};Scanner sc = new Scanner(System.in);System.out.println("请输入整数:");int num = sc.nextInt();for (int i = 0; i < arr.length; i++) {if (arr[i]==num){System.out.println(i);break;}}}
}

数组排序
1.选择排序

在排序过程中一共需要进行 n(n-1)/2 次比较,互相交换 n-1 次。
选择法排序简单、容易实现,适用于数量较小的排序。
public class SelectSort {public static void main(String[] args) {int[] arr = {63, 68, 39, 44, 8, 9, 4, 15};//从小到大排序for (int i = 0; i < arr.length-1; i++) {int minIndex = i; //假设当前位置就是最小值的下标for (int j = i+1; j < arr.length; j++) {if (arr[j]<arr[minIndex]){minIndex = j;}}//已经找到最小值的索引,将它放在开头int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}//遍历输出数组for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+"\t");}}
}

选择排序
2.冒泡排序

 最好的情况是正序,因此只要比较一次即可;最坏的情况是逆序,需要比较 n*n 次。冒泡法排序是稳定的排序方法,当待排序列有序时,效果比较好。
class BubblingSort {public static void main(String[] args) {int[] arr = {63, 68, 39, 44, 8, 9, 4, 15};for (int i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}//遍历输出数组for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}}
}

冒泡排序

3.交换排序

交换法排序和冒泡法排序类似,正序时最快,逆序时最慢,排列有序数据时效果最好。

4.插入排序

 需要经过 n-1 次插入过程如果数据恰好应该插入到序列的最后端,则不需要移动数据,可节省时间。因此,若原始数据基本有序,此算法具有较快的运算速度。

5.折半排序

对于较大的 n 时,是速度最快的排序算法
当时当 n 很小时,此方法往往比其他排序算法还要慢
折半法排序是不稳定的,对应有相同关键字的记录,排序后的结果可能会颠倒次序。

以上5种排序算法:插入法、冒泡法、交换法排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度;当 n 较小时,对稳定性不做要求时,宜选用选择法排序;对稳定性有要求时,宜选用插入法或者冒泡法排序。

相关文章:

  • Python 函数装饰器和闭包(变量作用域规则)
  • 南京优质的公司有哪些?
  • 2023年第十四届蓝桥杯省赛B组Java题解【简洁易懂】
  • Circular Plot系列(三):【视频教程】复现NCS图表之高大上的单细胞UMAP环形图
  • 编程速递-RAD Studio 12.3 Athens四月补丁:关注软件性能的开发者,安装此补丁十分必要
  • 可信执行环境(TEE):保障数据安全的核心技术
  • 5.4学习记录
  • 基于springboot3+mybatis整合,使用mybatisPlus插件自动完成简单的 增删改查操作
  • 2021年第十二届蓝桥杯省赛B组C++题解
  • 编程学习思考
  • vulkanscenegraph显示倾斜模型(6.4)-多线程下的记录与提交
  • Temp Mail 1.7.0 | 创建和管理临时邮箱,防止垃圾邮件骚扰,保护隐私安全
  • Javase 基础加强 —— 04 集合2.0
  • MIT 6.S081 2020 Lab2 system calls 个人全流程
  • 运维--计划任务
  • 深入理解Java垃圾回收机制
  • chrome 浏览器怎么不自动提示是否翻译网站
  • 「一针见血能力」的终极训练手册
  • PATHWAYS: 用于机器学习的异步分布式数据流
  • 广东省考备考(第一天5.4)—判断(对称)
  • 谢承祥已任自然资源部总工程师
  • 浙江一文旅局长五一亲自带团,去年专门考取了导游证
  • 马上评|提供情绪价值,也是文旅经济的软实力
  • 国际观察|韩国在政局多重不确定性中迎接总统选举
  • 全文丨中华人民共和国民营经济促进法
  • 朝鲜海军新型驱逐舰进行首次武器系统测试