java 基础 (1)简介-程序基础-流程控制-数组操作

学习教程 java入门

JavaEE JavaSe JavaMe

在这里插入图片描述

简单来说,Java SE就是标准版,包含标准的JVM和标准库,而Java EE是企业版,它只是在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务等,Java EE的应用使用的虚拟机和Java SE完全相同。

JDK JRE

在这里插入图片描述

JDK:Java Development Kit
JRE:Java Runtime Environment
简单地说,JRE就是运行Java字节码的虚拟机。但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具

其他

java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);
jar:用于把一组.class文件打包成一个.jar文件,便于发布;
javadoc:用于从Java源码中自动提取注释并生成文档;
jdb:Java调试器,用于开发阶段的运行调试。

如何运行一个java程序

在这里插入图片描述
先用javac(编译器)将hello.java文件,编译成字节码文件hello.calss ,然后用java(虚拟机jvm)执行这个字节码文件。
javac Hello.java
生成Hello.class
java Hello.class

总结

一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致;
使用javac可以将.java源码编译成.class字节码;
使用java可以运行一个已编译的Java程序,参数是类名。

Java程序基础

基本类型变量

public class Main {public static void main(String[] args) {int x = 100; // 定义int类型变量x,并赋予初始值100System.out.println(x); // 打印该变量的值}
}

int 声明类型,x是变量名称,值是100,不给默认是0。

基本数据类型

基本数据类型是CPU可以直接进行运算的类型。Java定义了以下几种基本数据类型:

整数类型:byte,short,int,long

浮点数类型:float,double

字符类型:char

布尔类型:boolean

计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从0000000011111111,换算成十进制是0255,换算成十六进制是00~ff,即1个字节的范围为0-255。

在这里插入图片描述
init占4个字节。

整型类型

对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)。各种整型能表示的最大范围如下:
byte:-128 ~ 127
short: -32768 ~ 32767
int: -2147483648 ~ 2147483647
long: -9223372036854775808 ~ 9223372036854775807

浮点型

浮点类型的数就是小数,因为小数用科学计数法表示的时候,小数点是可以“浮动”的,如1234.5可以表示成12.345x102,也可以表示成1.2345x103,所以称为浮点数。

下面是定义浮点数的例子:

float f1 = 3.14f;
float f2 = 3.14e38f; // 科学计数法表示的3.14x10^38
float f3 = 1.0; // 错误:不带f结尾的是double类型,不能赋值给floatdouble d = 1.79e308;
double d2 = -1.79e308;
double d3 = 4.9e-324; // 科学计数法表示的4.9x10^-324

对于float类型,需要加上f后缀。
浮点数可表示的范围非常大,float类型可最大表示3.4x1038,而double类型可最大表示1.79x10308。

字符类型

字符类型char表示一个字符。Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符:

public class Main {public static void main(String[] args) {char a = 'A';char zh = '中';System.out.println(a);System.out.println(zh);}
}
常量
final int PI = 3;

定义变量的时候,如果加上final修饰符,这个变量就变成了常量
常量不可重新赋值 类似于js的const

引用类型

String
String s = "hello";

String是双引号,char是单引号
引用类型的变量类似于js的对象,它内部存储一个“地址”,指向某个对象在内存的位置。

var关键字
var s = "hello"
//等同于
String s = "hello"

var会自动解析类型,然后赋值。相当于ts的const s = ‘hello’
因此,使用var定义变量,仅仅是少写了变量类型而已。

运算
int x = 12/5; // 2 只能得到整数部分
int y = 12345 % 67; // 12345÷67的余数是17

整数的数值表示不但是精确的,而且整数运算永远是精确的,即使是除法也是精确的,因为两个整数相除只能得到结果的整数部分

溢出

要特别注意,整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果。

移位运算

在计算机中,整数总是以二进制的形式表示。例如,int类型的整数7使用4字节表示的二进制如下:

00000000 0000000 0000000 00000111
可以对整数进行移位运算。对整数7左移1位将得到整数14,左移两位将得到整数28:

int n = 7;       // 00000000 00000000 00000000 00000111 = 7 //左移1位
int a = n << 1;  // 00000000 00000000 00000000 00001110 = 14 //左移2位
int b = n << 2;  // 00000000 00000000 00000000 00011100 = 28
int c = n << 28; // 01110000 00000000 00000000 00000000 = 1879048192
int d = n << 29; // 11100000 00000000 00000000 00000000 = -536870912

右移


int n = -536870912;
int a = n >> 1;  // 11110000 00000000 00000000 00000000 = -268435456
int b = n >> 2;  // 11111000 00000000 00000000 00000000 = -134217728
int c = n >> 28; // 11111111 11111111 11111111 11111110 = -2
int d = n >> 29; // 11111111 11111111 11111111 11111111 = -1

仔细观察可发现,左移实际上就是不断地×2,右移实际上就是不断地÷2。

位运算

位运算是按位进行与、或、非和异或的运算。

// 与 &
n = 0 & 0; //0 只有两个为1才是1
// 或 |
n = 1 | 0; //1 有一个1就是1
// 非 ~
n = ~1; //0 0和1互换
// 异或 ^
n = 0 ^ 0; //0 两个数不同结果就是1,否则为0
// 对两个整数进行位运算,其实是按位运算。
public class Main {public static void main(String[] args) {int i = 167776589; // 00001010 00000000 00010001 01001101int n = 167776512; // 00001010 00000000 00010001 00000000System.out.println(i & n); // 167776512}
}
类型自动提升与强制转型

在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short和int计算,结果总是int,原因是short首先自动被转型为int:

public class Main {public static void main(String[] args) {short s = 1234;int i = 123456;int x = s + i; // s自动转型为intshort y = s + i; // 编译错误!}
}

强制转型使用(类型),例如,将int强制转型为short:


int i = 12345;
short s = (short) i; // 12345

超出范围的强制转型会得到错误的结果,原因是转型时,int的两个高位字节直接被扔掉,仅保留了低位的两个字节:

浮点数运算

浮点数运算和整数运算相比,只能进行加减乘除这些数值计算,不能做位运算和移位运算。
浮点数的运算会有误差,比如
浮点数0.1在计算机中就无法精确表示,因为十进制的0.1换算成二进制是一个无限循环小数,很显然,无论使用float还是double,都只能存储一个0.1的近似值。但是,0.5这个浮点数又可以精确地表示。

double a = 1 - 9.0/10
System.out.print(a) //0.9999999
类型提升

如果参与运算的两个数其中一个是整型,那么整型可以自动提升到浮点型:

int a = 1
double b = 1.2 + a

但是注意

double d = 1.2 + 24 / 5; // 5.2

在复杂的四则运算中,两个整数的运算不会出现自动提升的情况

强制转换

可以将浮点数强制转型为整数。在转型时,浮点数的小数部分会被丢掉。如果转型后超过了整型能表示的最大范围,将返回整型的最大值。

int n1 = (int) 12.3; // 12
int n2 = (int) 12.7; // 12
三元表达式
public class Main {public static void main(String[] args) {int n = -100;int x = n >= 0 ? n : -n;System.out.println(x);}
}

x和y的类型必须相同,因为返回值不是boolean,而是x和y之一。

字符和字符串

在Java中,字符和字符串是两个不同的类型。

字符类型

字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符:

char c1 = 'A'; //占两个字节  只能有一个
char c2 = '中'; //占两个字节

因为Java在内存中总是使用Unicode表示字符,所以,一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节(跟js不同)。

字符串类型

和char类型不同,字符串类型String是引用类型,我们用双引号"…"表示字符串。一个字符串可以存储0个到任意个字符:

String s3 = "中文 ABC"; // 包含6个字符,其中有一个空格String s4 = s3 + 4 + 4.5 // "中文 ABC44.5",跟js一样,会将其他类型转换为StringString s5 = """123 //多行字符串 js用``,而java用"""..."""321"""
数组类型
 int[] ns = new int[5];ns[0] = 68;ns[1] = 79;ns[2] = 91;ns[3] = 85;ns[4] = 62;// 等同于
int[] ns = new int[] { 68, 79, 91, 85, 62 };
// 等同于
int[] ns = { 68, 79, 91, 85, 62 };

Java的数组有几个特点:

  • 数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false;
  • 数组一旦创建后,大小就不可改变。

流程控制

格式化输出
public class Main {public static void main(String[] args) {double d = 3.1415926;System.out.printf("%.2f\n", d); // 显示两位小数3.14System.out.printf("%.4f\n", d); // 显示4位小数3.1416}
}

if,else while do while for循环 switch case;等跟js类型,这里不多详述。

数组操作

循环
  • for
  • for each java的foreach只能遍历值,无法获取索引。
public class Main {public static void main(String[] args) {int[] ns = { 1, 4, 9, 16, 25 };for (int n : ns) {System.out.println(n);}}
}
  • 使用Arrays.toString()可以打印出数组的字符串形式,正常System.out.println只能显示数组的内存地址。
排序
  • 冒泡排序

  •       for(int i = 0; i<ns.length;i++){for(int j = i+1; j < ns.length; j++){int pre = ns[i];int next = ns[j];if(pre > next){ns[i] = next;ns[j] = pre;}}}```
    
  • Arrays.sort也提供了排序方法 必须注意,对数组排序实际上修改了数组本身

  •   public static void main(String[] args) {int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };Arrays.sort(ns);System.out.println(Arrays.toString(ns));}
    

}

#### 多维数组
```java
public class Main {public static void main(String[] args) {int[][] ns = {{ 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 10, 11, 12 }};System.out.println(ns.length); // 3}
}

Arrays.deepToString打印多维数组;

命令行参数

Java程序的入口是main方法,而main方法可以接受一个命令行参数,它是一个String[]数组。
这个命令行参数由JVM接收用户输入并传给main方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端基础复习(后端人员看前端知识)

企业级前端项目开发中&#xff0c;需要将前端开发所需要的工具、技术、流程、经验进行规范化和标准化&#xff0c;而不是零散的html、js、css文件堆叠在一起。 首先我们需配置前端的开发基础环境NodeJS&#xff0c;相当于后端人员java开发的JDK。然后搭建前端工程脚手架Vue-cl…

降噪和音频修复 iZotope RX 7 Advanced

iZotope RX 7 Advanced 是一款功能强大的音频修复和增强软件&#xff0c;它能够帮助用户轻松应对各种音频问题&#xff0c;提供全面的工具和技术来优化和改善音频质量。 首先&#xff0c;iZotope RX 7 Advanced 具有出色的降噪功能。无论是背景噪音、杂音还是其他干扰因素&…

JVM jstat工具

jstat工具说明 用以判断JVM是否存在内存问题&#xff0c;判断JVM垃圾回收是否正常 jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ] 参数解释&#xff1a; *Options -选项&#xff0c;我们一般使用-gcutil查看GC情况 vmid -VM的进程号&#xf…

LeetCode:14.最长公共前缀

14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 目录 题目&#xff1a; 思路&#xff1a; 代码有限注释&#xff1a; 每日表情包&#xff1a; 题目&#xff1a; 思路&#xff1a; 仅有一种&#xff0c;LeetCode的四种解法&#xff0c;三种都是来水的&#…

『运维备忘录』之 TAR 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

【51单片机】外部中断和定时器中断

目录 中断系统中断介绍中断概念 中断结构及相关寄存器中断结构中断相关寄存器 外部中断实验外部中断配置软件设计实验现象 定时器中断定时器介绍51 单片机定时器原理51 单片机定时/计数器结构51 单片机定时/计数器的工作方式 定时器配置硬件设计软件设计实验现象 中断系统 本章…

Ansible command命令模块 这个模块可以直接在远程主机上执行命令,并将结果返回本主机。

目录 练习环境配置主机清单配置无密码链接ping模块 command 命令模块也可以用来安装点东西看个路径 练习环境 ansible_naster 作为主服务器 ansible_slave 1 2 作为两个客户端 配置主机清单 在/etc/ansible/hosts 文件中进行编辑 vim /etc/ansible/bosts配置无密码链接 注…

Django前后端分离之后端实践2

小实践&#xff1a;实现用户登录、注销及ORM管理功能、事务开启小实践 models.py class Books(models.Model):id models.CharField(primary_keyTrue,max_length20,verbose_name"图书ID")name models.CharField(max_length20,verbose_name图书名称)status models…

《数电》理论笔记-第2章-组合逻辑电路

一&#xff0c;集成门电路 1TTL门电路 TTL门电路中双极型三极管构成,它的特点是速度快、抗静电能力强集成度低、功耗大&#xff0c; 目前广泛应用于中、小规模集成电路中。 TTL门电路有 74 (商用) 和 54 (军用) 两大系列&#xff0c;每个系列中又有若干子系列。 2 CMOS门电路 …

Echarts统计用户近七日走量趋势:前后端实现

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f492; 公众号&#xff1a;知识浅谈 &#x1f525;网站…

OTG -- STM32 OTG驱动代码下载及简述(三)

目录 前沿 1 STM32 OTG标准库的获取 2 设备模式代码匹配开发板 2.1 OTG FS全速代码修改 2.2 OTG HS代码修改 2.2.1 OTG HS外部高速PHY运行在高速模式代码修改 2.2.2 OTG HS外部高速PHY运行在全速模式代码修改 2.2.3 OTG HS内部全速PHY运行在全速模式代码修改 前沿 前面…

跳过mysql密码并重置密码 shell脚本

脚本 目前只是验证了5.7 版本是可以的&#xff0c;8.多的还需要验证 以下是一个简单的Shell脚本&#xff0c;用于跳过MySQL密码设置并重置密码&#xff1a; #!/bin/bash yum install psmisc -y# 停止MySQL服务 sudo service mysqld stop# 跳过密码验证 sudo mysqld --skip-g…

每日一题来啦!请查收~(至少是其他数字两倍,两个数组的交集)

今天要写的题目有哪些呢&#xff1f; 747. 至少是其他数字两倍的最大数 - 力扣&#xff08;LeetCode&#xff09; int dominantIndex(int* nums, int numsSize) {int max0;maxnums[0];int index0;for(int i1;i<numsSize;i){if(nums[i]>max){maxnums[i];indexi;i;//找出最…

C程序训练:二分查找法的应用之2

本文来自&#xff1a;C程序训练&#xff1a;二分查找法的应用之2 在《C程序训练&#xff1a;二分查找法的应用》一文中介绍了利用二分查找计算某个区间中数的个数&#xff0c;本文介绍利用二分查找法计算数列中出现单个数字的位置。题目描述如下。 题目描述&#xff1a;一维整…

51单片机基础:定时器

1.定时器介绍 51单片机通常有两个定时器&#xff1a;定时器 0/1&#xff0c;好一点的可能有定时器3。 在介绍定时器之前我们先科普下几个知识&#xff1a; 1&#xff0c;CPU 时序的有关知识 ①振荡周期&#xff1a;为单片机提供定时信号的振荡源的周期&#xff08;晶振周期或…

VSCode无法启动:Waiting for server log...

问题基本情况 [13:30:20.720] > code 1.86.0 (commit 05047486b6df5eb8d44b2ecd70ea3bdf775fd937) [13:30:20.724] > Running ssh connection command... /var/fpwork/reiss/vscdata/server/cplane/.vscode-server/code-05047486b6df5eb8d44b2ecd70ea3bdf775fd937 comman…

Linux系统调试课:Linux错误码介绍

文章目录 一、错误码二、错误码返回案例三、使用 goto 语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢错误代码由内核或用户空间应用程序(通过errno变量)解释。错误处理在软件开发中非常重要,而不仅仅是在内核开发中。幸运的是,内核提供的几种错误,几乎涵盖了可…

6.1810: Operating System Engineering 2023 <Lab9: mmap>

一、本节任务 二、Lab: mmap (hard) 2.1 mmap 介绍 mmap(2) 系统调用能将文件或者设备映射到内存中&#xff0c;返回映射区域的起始地址。 #include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset); int munmap(void …

【Mysql】整理

Mysql整理与总结 整理Mysql的基本内容供回顾。 参考&#xff1a; [1]. 掘金.MySQL三大日志(binlog,redolog,undolog)详解 [2]. Javaguide.MySQL三大日志(binlog、redo log和undo log)详解

c语言贪食蛇游戏

演示视频 目录 一.概述 二.游戏开始前 修改控制台程序标题和大小 Win32 API GetStdHandle函数 GetConsoleCursorInfo函数和SetConsoleCursorInfo函数 SetConsoleCursorPosition函数 游戏开篇界面处理 创建地图 蛇身节点以及食物节点初始化 蛇身的初始化 整体蛇节点…