从C到JAVA之学习JAVA的第一周笔记

文章目录

  • java语言概述
  • JDK与JRE
  • 编写执行过程
  • 第一份java代码解读
    • 编写
    • 编译
    • 运行
    • 其他
  • 注释
    • 三种注释方法
  • java API文档
  • 关键字
  • 标识符
  • 数据类型
    • 基本数据类型
    • 自动类型提升规则
    • 引用数据类型
  • string
    • 概述
    • String与基本数据类型的变量间的运算
  • 运算符
  • 键盘录入
  • 运行控制语句
  • 数组
    • 定义与静态初始化
    • 数组元素访问
    • 动态初始化
    • 内存

java语言概述

Java语言是一种跨平台的面向对象编程语言,由Sun Microsystems(后被Oracle收购)于1995年推出。它是一种高性能、健壮、安全、简单易学的编程语言,被广泛用于开发各种类型的应用程序,从桌面应用到企业级服务器应用,再到移动应用和嵌入式系统。

以下是Java语言的主要特点和概述:

  1. 面向对象:Java是一种纯粹的面向对象编程语言,支持类、对象、封装、继承、多态等面向对象的特性。
  2. 跨平台性:Java程序可以在不同的操作系统上运行,因为它的编译器将源代码编译成中间代码(字节码),然后在Java虚拟机(JVM)上执行。JVM负责将字节码解释成特定平台的机器码,从而实现跨平台性。
  3. 健壮性:Java具有严格的数据类型检查、异常处理机制、内存管理和垃圾回收功能,使得程序更加健壮、稳定和可靠。
  4. 安全性:Java提供了安全性机制,如类加载机制、字节码校验、安全管理器等,可以防止恶意代码对系统造成损害。

JDK与JRE

JDK (Java Development Kit):是Java程序开发工具包,包含JRE和开发人员使用的工具。

JRE(Java Runtime Environment) :是Java程序的运行时环境,包含JVM和运行时所需要的核心类库。

jre

JDK = JRE + 开发工具集(例如 Javac 编译工具等)

JRE = JVM + Java SE 标准类库

OIP

编写执行过程

编写:将java代码编写在.java结尾的源文件中

编译:.java结尾的源文件进行编译操作。java 原文件名.java

运行:针对编译后的字节码文件,进行解释运行。java 字节码文件名

step

第一份java代码解读

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

yunxing

编写

  1. class关键字,表示“类”,后面跟着类名

  2. Java 程序的入口是 main 方法,public static void main(String[] args)是Java程序的入口点.

    写法二:public static void main(String args[])

  3. System.out.println()用于打印信息到控制台。

    println换行print不换行,相当于最后面加不加\n

  4. 严格区分大小写

  5. 662E827A-FA32-4464-B0BD-40087F429E98

编译

  1. 编译后生成1个或多个字节码文件,每一个字节码对应一个java类,并且字节码文件与类名相同。

运行

java HelloChina编译时类名要区分大小写。

其他

  1. 一个源文件可以有多个类,但最多只有一个类可以使用public声明,且要求声明为public的类的类名源文件名相同

注释

三种注释方法

  • 单行注释
//注释文字
  • 多行注释

    不能嵌套使用

/* 

注释文字 1 

注释文字 2

注释文字 3

*/
  • 文档注释 (Java 特有)

    文档注释以 /** 开始,以 */ 结束,通常出现在类、方法、字段等的声明前面,用于生成代码文档,这种注释可以被工具提取并生成 API 文档

    文档注释的格式通常包含一些特定的标签,如 @param 用于描述方法参数,@return 用于描述返回值,@throws 用于描述可能抛出的异常等等,这些标签有助于生成清晰的API文档,以便其他开发者能够更好地理解和使用你的代码。

/**
 @author 指定 java 程序的作者
 @version 指定源文件的版本
*/ 

在命令行中使用 Javadoc 工具来生成 API 文档。可以通过 JDK 中的 javadoc 命令来执行。通常的格式为:

javadoc [options] [packagenames] [sourcefiles] [@files]
  • [options]:Javadoc 的选项,例如 -d 指定生成文档的目录,-author 包含作者信息等。
  • [packagenames]:需要生成文档的包名。
  • [sourcefiles]:需要生成文档的源文件。
  • [@files]:包含了其他选项的文本文件。

例如:

javadoc -d doc -author -version MyPackage

这个命令会生成 MyPackage 包中所有类的文档,包括作者信息和版本号,并将文档保存在 doc 目录中。

可以通过浏览器打开 index.html 文件来查看整个文档。

注意:Java 文档注释应该位于类、方法或字段的声明之前。

java API文档

Java API文档是Java编程语言的官方文档,提供了关于Java标准库中各个类、接口、方法的详细信息和使用说明。

Overview (Java SE 17 & JDK 17) (oracle.com)

关键字

Java关键字是一组被Java编程语言保留并用于特定目的的单词。这些关键字具有特殊含义,不能用作标识符(如类名、方法名、变量名等)。

  1. 48个关键字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while。

  2. 2个保留字:goto、const。

  3. 3个特殊直接量:true、false、null。

Java的关键字(keyword)有51+2个保留字=53个关键字

  • 关键字全是小写字母

标识符

在 Java 中,标识符(Identifier)是用来标识各种编程元素的名称,包括变量、方法、类、接口、包等。Java 的标识符需要遵循以下规则:

  1. 字符集:标识符可以包含字母(大小写均可)、数字和下划线 _,但必须以字母、美元符号 $ 或下划线 _ 开头。
  2. 大小写敏感:标识符是区分大小写的,也就是说 myVariableMyVariable 是不同的标识符。
  3. 长度限制:标识符的长度理论上是没有限制的,但实际上应根据编程规范和代码可读性来合理命名,通常建议不要过长。
  4. 保留字:标识符不能与 Java 的保留字相同,Java 的保留字是被编程语言保留用于特定用途的关键字,例如 ifelsewhile 等。
  5. 规范命名:标识符应该采用驼峰命名法(Camel Case)或者下划线分隔法(Snake Case)来命名,以提高可读性。驼峰命名法是指除了第一个单词之外,后续单词的首字母大写,例如 myVariableName;下划线分隔法是指单词之间用下划线 _ 分隔,例如 my_variable_name
  6. 包名约定:包名应该使用小写字母,多个单词之间使用点 . 分隔,例如 com.example.package
  7. 类名,接口名:应该使用大写字母开头的大驼峰命名法,例如 MyClass
  8. 变量名,方法名:第二个单词开始每个单词大写的小驼峰命名法。
  9. 常量名约定:常量名应该使用全部大写字母,并用下划线 _ 分隔单词,例如 MAX_VALUE

数据类型

基本数据类型

  1. 整型:byte \ short \ int \ long
  • 声明long类型变量是,需要提供后缀,需要使用后缀L或者l
long myLongVariable = 10000000000L;
  1. 浮点型: float \ double
  • 声明float类型的变量时,需要使用后缀F或者f。例如:
float myFloatVariable = 3.14F;
  1. 字符型:char

char类型表示一个16位的Unicode字符,它占用2个字节的存储空间。

  • 直接’',里面只能一个字符

  • 将Unicode编码值赋给char类型的变量。在Java中,可以使用\u前缀来表示Unicode编码值。例如:

    char myChar = '\u0041'; // 这里的\u0041表示十六进制编码值为41的字符,即'A'
    

    这样,myChar变量将被赋值为大写字母’A’。

  • 使用转义字符来表示。一些常见的转义字符包括:

    • \t: 制表符(Tab)
    • \n: 换行符(Newline)
    • \r: 回车符(Carriage return)
    • \': 单引号
    • \": 双引号
    • \\: 反斜杠

    例如,要表示换行符,可以使用\n

    char newlineChar = '\n';
    
  • 使用具体字符对应ASCII码值

  1. 布尔型:boolean
  • 在Java中不能使用数字1或0来代替布尔值,与C语言不同。
  • 在Java中,布尔类型(boolean)的占用空间大小并没有明确定义。

自动类型提升规则

规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型 。

Snipaste_2024-04-18_21-21-45

  1. 当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给存储范围大的变量时
  2. 当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,会按照其中最大的类型运算
  3. 当 byte,short,char 数据类型的变量进行算术运算时,按照 int 类型处理。

引用数据类型

  1. 类(Class)
  2. 接口(Interface)
  3. 数组(Array)

string

概述

  1. 是一种引用数据类型

  2. 使用“”进行赋值

    String myString = "Hello, World!";
    
  3. String声明的字符串可以包含0到多个字符

String与基本数据类型的变量间的运算

  1. 任意八种基本数据类型的数据与 String 类型只能进行连接“+”运算,且结果一定也是 String 类型
  2. String 类型不能通过强制类型()转换,转为其他的类型

运算符

1713583471888

与C语言相似,java多了一个>>>,无符号右移

在C语言中,>> 运算符是算术右移。算术右移是针对有符号整数的右移操作,它会保留符号位,并在左侧用符号位填充空缺位。

在java中,>>与C一致,对比一下java中>>>>>

  1. >>(有符号右移)

    使用 >> 运算符时,对于正数,它的操作结果与无符号右移 >>> 相同。对于负数,则会在左侧用1填充空缺位,>> 右移后会保持负数的符号。

  2. >>>(无符号右移)

    使用 >>> 运算符时,无论是正数还是负数,都会在左侧用0填充空缺位。>>> 右移操作不保留符号位,因此结果总是正数。

举例:

x = -8 1111 1111 1111 1111 1111 1111 1111 1000

x >>> 1 结果为 0111 1111 1111 1111 1111 1111 1111 1100,即 2147483644

右移后会在左侧用0填充空缺位,结果总是正数

其他注意:

  1. 结果与被模数符号相同

    举例:

    5 % -2 = 1

    -5 % 2 =-1

    -5 % -2 = -1

  2. “+”号的两种用法

    第一种:对于*+两边都是数值的话,+*就是加法的意思

    第二种:对于*+两边至少有一边是字符串的话,+*就是拼接的意思

  3. 逻辑运算符

    yunsuanfu

  4. 位运算

    weiyunsuan

键盘录入

Scanner是Java中的一个类,位于java.util包中。它主要用于从各种输入源(如键盘、文件等)中获取用户输入的数据。Scanner类提供了多种方法,可以方便地读取不同类型的数据,例如整数、浮点数、字符串等。

使用scanner获取不同类型的步骤

  1. 导包:找到这个类`import java.unti.Scanner`
  2. 创建对象:创建一个Scanner类的实例
  3. 接收数据:调用Scanner类中的方法,获取指定类型的变量
import java.util.Scanner;
class ScannerDemo{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.print("输入一个数字:");
		int i = sc.nextInt();
		System.out.println(i);
	}
}

运行控制语句

if-elseSwitchwhilefordo-while基本用法与C语言一致

不同点:

  1. **数据类型限制:** 在C语言中,`switch`语句的条件表达式只能是整数类型(`int`、`char`等),而在Java中,条件表达式可以是整数、枚举、字符串等类型。
  2. **浮点数支持:** 在C语言中,`switch`语句不支持浮点数类型的条件表达式,而在Java中,`switch`语句可以使用`float`和`double`类型的表达式。
  3. **`switch`语句表达式:** 在Java 12及以后的版本中,`switch`语句引入了表达式形式,使得代码更加简洁和灵活。而在C语言中,`switch`语句只能作为语句使用,不能作为表达式。
  4. **`switch`语句的`case`标签:** 在Java中,`switch`语句的`case`标签可以使用枚举、字符串和表达式,而在C语言中,`case`标签只能是常量。

对于第三点,简化代码:

语句只有一行,可以省略大括号

import java.util.Scanner;
class SwitchDemo{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.print("输入一个数字:");
		int num = sc.nextInt();
		switch (num) {
		case 1 -> System.out.println("这是1");
		case 2 -> System.out.println("这是2");
		default -> System.out.println("啥都不是");
		}
	}
}
import java.util.Scanner;
class SwitchDemo{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.print("输入一个数字:");
		int num = sc.nextInt();
		switch (num) {
		case 1 -> System.out.println("这是1");
		case 2 -> System.out.println("这是2");
		default -> System.out.println("啥都不是");
		}
	}
}

数组

数组是一种容器

在Java中,数组是一种用来存储相同类型数据的数据结构。数组可以存储基本数据类型(如整数、浮点数等)或者引用类型(如对象)。

定义与静态初始化

以下是关于Java数组的一些重要特点和用法:

  1. 声明数组:在Java中声明数组需要指定数组的类型和数组名,语法如下:

    // 声明一个整型数组
    int[] numbers;
    
    // 声明一个字符串数组
    String[] names;
    
  2. 初始化数组

完整格式:

数据类型 [ ] 数组名 = new 数据类型 [ ] {元素1, 元素2...};

int[] numbers = new int[] {10, 20, 30, 40, 50};

简化格式:

数据类型 [ ] 数组名 ={元素1, 元素2...};

int[] numbers = {10, 20, 30, 40, 50};

在Java中,直接输出数组名得到数组的引用(地址)

int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers); // 输出数组引用

请添加图片描述

  1. [:表示这是一个数组。
  2. I:表示数组中元素的数据类型。在这里,I 代表整型(int)数组。Java 中的其他数据类型对应的标识符有:[B(字节数组)、[S(短整型数组)、[J(长整型数组)、[F(浮点型数组)、[D(双精度浮点型数组)、[C(字符数组)、[Z(布尔型数组)等。
  3. @:表示分隔符,用于分隔类型标识符和哈希码。
  4. 5acf9800:表示数组对象的哈希码,即数组在内存中的地址值的十六进制表示。

数组元素访问

 System.out.println("第一个元素:" + numbers[0]);

与C语言一致

动态初始化

数据类型 [ ] 数组名 = new 数据类型 [数组长度] ;

数组默认初始化数值:

  • 对于基本数据类型的数组:
    • byte, short, int, long: 默认初始化为0。
    • float, double: 默认初始化为0.0。
    • char: 默认初始化为 \u0000,即空字符。
    • boolean: 默认初始化为 false
  • 对于引用数据类型的数组(如对象数组):
    • 默认初始化为 null,即表示没有指向任何对象。

内存

堆主要用于存储对象和数组,而栈主要用于存储方法调用和局部变量。

对于数组来说:

  1. 只要是new出来的一定在堆里开辟了一个小空间
  2. new了多次,就有多个小空间

两个数组指向同一个空间的情况:

array1array2 实际上指向相同的数组对象。因此,当我们通过 array1 修改数组的第一个元素为10时,实际上也修改了数组对象,所以 array2 中的第一个元素也会变为10。

public class Main {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3, 4, 5};
        int[] array2 = array1; // array2指向array1所指向的数组

        // 修改array1的第一个元素
        array1[0] = 10;

        // 输出array2的第一个元素
        System.out.println("array2[0] = " + array2[0]); // 输出为10
    }
}

如有错误烦请指正。

感谢您的阅读

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习500问——Chapter08:目标检测(2)

文章目录 8.2.4 R-FCN 8.2.5 FPN 8.2.6 Mask R-CNN 8.2.4 R-FCN R-FCN 有哪些创新点 R-FCN仍然属于two-stage目标检测算法:RPN R-FCN Fully convolutional位置敏感得分图(position-sentive score maps) our region-based detector is ful…

【嵌入式】嵌入式开发中常见的面试题(持续更新中)

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Spring Boot中接收各种各样的参数

一、接收json参数&#xff0c;封装为Map 1.1、核心代码 /*** 接收json参数&#xff0c;封装为Map* param servletRequest* return* throws Exception*/ PostMapping("/getParam") public R getParam(HttpServletRequest servletRequest) throws Exception {Map<…

Linux 认识与学习Bash——2

1 read 从键盘读取变量的值 read 后面不带变量&#xff0c;那么默认会给REPLY变量赋值 #!/bin/bash echo -n "请输入你的名字&#xff1a;" read name echo "欢迎您 $name" echo "----------------"echo -n "请输入你的名字2&#xff1a;&q…

VR全景:为户外游玩体验插上科技翅膀

随着VR全景技术的愈发成熟&#xff0c;无数人感到惊艳&#xff0c;也让各行各业看到了一片光明的发展前景。尤其是越来越多的文旅景区开始引入VR全景技术&#xff0c;相较于以往的静态风景图&#xff0c;显然现在的VR全景结合了动态图像和声音更加吸引人。 VR全景技术正在逐步改…

肿瘤相关成纤维细胞分型及单细胞深入研究(文献)

目录 ①六种癌症类型共有的CAF亚型&#xff08;pan-CAFs&#xff09; 1&#xff0c;六种泛CAF亚型的鉴定和分子表征 2&#xff0c;Pan-CAF亚型特异性转录因子和基因调控网络 3&#xff0c;预后分析 4&#xff0c;Pan-CAF亚型与肿瘤中特定分子功能的关联 ②泛癌单细胞转录…

【论文精读】Bag of Tricks for Image Classification with Convolutional Neural Networks

这篇文章比较早了&#xff0c;2018年的 摘要 最近在图像分类研究方面取得的大部分进展可以归功于训练程序的改进&#xff0c;如数据增强和优化方法的改变。然而&#xff0c;在文献中&#xff0c;大多数改进要么作为实现细节简要提到&#xff0c;要么只在源代码中可见。在本文中…

kafka实验部署

一、前期准备 二、kafka实验 在zookeeper后继续进行操作 2.1 为ndoe1、node2、node3作出部署 2.1.1 解压kafka压缩包&#xff08;node1举例&#xff09; 2.1.2 操作 将解压后的kafka移动到kafka&#xff0c;进入到kafka下的config中&#xff0c;复制文件 2.1.2.1 编辑server.pr…

C语言语法进阶

条件运算符 条件运算符是 C 语言中唯一的一种三目运算符。三目运算符代表有三个操作数&#xff1b;双目 运算符代表有两个操作数&#xff0c;如逻辑与运算符就是双目运算符&#xff1b;单目运算符代表有一个操作数&#xff0c; 如逻辑非运算符就是单目运算符。运算符也称操作符…

Elasticsearch:(二)2.安装kibana

1.环境安装介绍: 安装java环境安装Elasticsearch安装kibana安装Elasticsearch-head插件 本节文章主要讲解kibana的安装。 2.下载 下载Elasticsearch对应的版本,参考官方自身产品兼容版本:支持一览表 | Elastic 下载地址:Kibana 7.17.20 | Elastic Kibana 7.17.20 | Ela…

Linux之C编程入门

目录 第1关&#xff1a;第一个C程序 任务描述 相关知识 编译C程序 编程要求 答案及其步骤&#xff1a; 第2关&#xff1a;Linux编译C程序 任务描述 相关知识 gcc编译器使用方法 编程要求 答案及其步骤&#xff1a; 第3关&#xff1a;Linux之静态库编写 任务描述 相关知识 生成…

el-menu 有一级二级三级菜单

效果如下 菜单代码如下 <el-menu:default-active"menuDefaultActive"class"el-menu-box":text-color"menuTextColor":active-text-color"menuActiveTextColor":unique-opened"true"><!-- 一级菜单 --><tem…

常见排序算法(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序,基数排序,桶排序)

一.排序的概念 1.排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作 2.稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排…

STM32 HAL库 利用CH376进行USB文件读写

STM32 其实可以进行读取USB文件,但仅限于F4以上芯片才可以进行SUB文件读写,但在项目开发中,往往用不到此芯片,那么只能通过外挂的USB芯片进行USB文件读写,本文则是采用STM32F103的SPI与CH376进行通信,通过CH376操作指令进行操作。 1、CH376介绍 CH376芯片 是沁恒的一款文…

paho-mqtt 库揭秘

文章目录 **paho-mqtt 库揭秘**第一部分&#xff1a;背景介绍第二部分&#xff1a;paho-mqtt 是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第七部…

如何批量给Word文件增加前缀序号?“汇帮批量重命名”帮助你批量给word文件增加前缀序号。

批量给Word文件增加前缀序号的过程&#xff0c;对于经常处理大量文档的人来说&#xff0c;是一项既繁琐又必要的任务。首先&#xff0c;我们需要明确为什么要给Word文件增加前缀序号。在很多情况下&#xff0c;当我们需要按照一定的顺序对多个文档进行管理和归档时&#xff0c;…

海绵结构:Hash as RO

参考文献&#xff1a; [BDPA07] Bertoni G, Daemen J, Peeters M, et al. Sponge functions[C]//ECRYPT hash workshop. 2007, 2007(9).[GPP11] Guo J, Peyrin T, Poschmann A. The PHOTON family of lightweight hash functions[C]//Advances in Cryptology–CRYPTO 2011: 31…

MBD_入门篇_19_Simulink数学运算模块

19.Simulink数学运算模块 19.1 概述 数学运算模块&#xff0c;包含了一些数学运算&#xff0c;比如最常用的加减乘除等。 19.2 Add加法模块 设置加法模块的形状&#xff0c;默认是方形的&#xff0c;推荐使用方形的。 运算符设置。 设置符号为-&#xff0c;可以理解为本来是0,…

CSS 设置空格原样显示 white-space:pre-wrap;

CSS 设置空格原样显示 问题描述 html 渲染内容时&#xff0c;对于 空格、回车、Tab 键的 默认处理方式是 &#xff1a; 无论存在多少个连续的空格&#xff0c;都只会保留一个。 结论 由于以上的特性&#xff0c;导致了我们无法直接渲染出原格式的文本。pre 标签 了解一下 &…

今日刷三题(day4):简写单词+dd爱框框+除2!

题目一&#xff1a;简写单词 题目描述&#xff1a; 比如 “College English Test”可以简写成“CET”&#xff0c;“Computer Science”可以简写为“CS”&#xff0c;“I am Bob”简写为“IAB” 输入输出描述&#xff1a; 输入&#xff1a;一个复合单词 输出&#xff1a;输…