从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}
}

如有错误烦请指正。

感谢您的阅读

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

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

相关文章

springboot no mapping for.....解决办法

这个问题是由于没有加入对应的GET,POST注解,导致映射失败,加入对应注解就ok了

JDK 11下载、安装、配置

下载 到Oracle管网下载JDK 11,下载前需要登录,否则直接点下载会出现502 bad gateway。 下载页面链接 https://www.oracle.com/hk/java/technologies/downloads/#java11-windows 登录 有些人可能没有Oracle账号,注册也比较慢,有需…

随笔05 我的创作纪念日(512天)

机缘 机缘这事儿,我在随笔系列博文里已经翻来覆去说了不少,这次就不再唠叨了,省得被小伙伴嫌弃成祥林嫂~😜 🌸随笔01 我的创作纪念日(128天)_newmitbbs-CSDN博客 收获 我这一小片自留地&…

JavaEE 初阶篇-深入了解 File 文件操作(实现文件搜索、非空文件夹删除)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 File 文件概述 2.0 创建 File 类对象的方法 2.1 判断文件类型、获取文件信息的方法 2.2 创建文件、删除文件的方法 2.3 遍历文件夹的方法 3.0 文件搜索与删除 3.1…

WebSocket 快速入门 - springboo聊天功能

目录 一、概述 1、HTTP(超文本传输协议) 2、轮询和长轮询 3、WebSocket 二、WebSocket快速使用 1、基于Java注解实现WebSocket服务器端 2、JS前端测试 三、WebSocket进阶使用 1、如何获取当前用户信息 2、 后端聊天功能实现 一、概述 HTTP…

PVE grub resue错误修复 lvmid BUG

服务器断电后启动不起来,显示grub resue 找了半天没有找到修复方法。看官方文档有一处Recovering from grub “disk not found” error when booting from LVM 极为类似。https://pve.proxmox.com/wiki/Recover_From_Grub_Failure 下面是处理过程。 使用PVE 6.4启…

Leetcode算法训练日记 | day33

专题九 贪心算法 一、跳跃游戏 1.题目 Leetcode:第 55 题 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 …

机器学习(二)之监督学习

前言: 上一节大概讲解了几种学习方式,下面几张就具体来讲讲监督学习的几种算法。 以下示例中和都是权重的意思!!! 注:本文如有错误之处,还请读者指出,欢迎评论区探讨! 1…

MATLAB实现图片栅格化

MATLAB实现图片栅格化 1.读取图片:首先,你需要使用imread函数读取要栅格化的图片。 2.设置栅格大小:确定你希望将图片划分成的栅格大小,即每个栅格的宽度和高度。 3.计算栅格数量:根据图片的总尺寸和栅格大小&#…

Compose 布局

文章目录 Compose 布局ColumnColumn属性使用 RowRow属性使用 BoxBox属性使用 ConstraintLayoutLazyColumnLazyColumn属性使用使用多类型使用粘性标题回到顶部 LazyRowLazyRow属性使用 LazyVerticalGridLazyVerticalGrid属性使用 Compose 布局 Column Compose中的”垂直线性布…

F-logic DataCube3 SQL注入漏洞复现(CVE-2024-31750)

0x01 产品简介 F-logic DataCube3是一款用于光伏发电系统的紧凑型终端测量系统。 0x02 漏洞概述 F-logic DataCube3 /admin/pr_monitor/getting_index_data.php 接口处存在SQL注入漏洞,未经身份验证的攻击者可通过该漏洞获取数据库敏感信息,深入利用可控制整个web服务器。 …

计算机图形学:直线生成算法—DDA

DDA(Digital Differential Analyzer,数字差分分析器)算法是一种基本的直线生成算法,通常用于计算机图形学中。它通过将直线划分为若干个等间隔的小线段,然后在每个小线段中选择一个像素点进行绘制,从而近似…

产品原型图概念

产品原型图概念 产品原型图作用 如下图: 产品原型图的三种分类 线框图 通过【线段色块文字】描述产品页面。优点:制作快速。 缺点:传递信息容易遗漏。 应用:早期方案讨论,需要快速输出的场景,团队配合…

Learn ComputeShader 01 First Computer Shader

使用Unity版本:2019.4.12f1 整体流程: 1添加一个quad object并添加一个无光照材质 2.相机投影模式设置为正交 3.调整quad使其完全显示在相机内 4.创建脚本并且使用计算着色器覆盖quad的纹理 5.创建一个compute shader 前三步完成以后结果应该是这…

网络基础先导

前言:最好在牢固前面几大件(编程语言、数据结构、操作系统),并且您有一个服务器的基础上(我使用的是腾讯云中配置最低的服务器)再来学习本系列的网络知识。 1.网络发展简要 下面就是简单提及一些概念而已&…

二叉树之AVL树

文章目录 1. AVL树的概念(logN)1.1背景1.2规则 2.AVL树节点的定义3.AVL树的插入4. AVL树的旋转(重点)4.1 新节点插入较高的右子树的右侧:左单璇;4.2 新节点插入较高左子树的左侧:右单璇;4.3(双旋…

AJAX——ajax原理

1.XMLHttpRequest 定义:XMLHttpRequest(XHR)对象用于与服务器交互。通过XMLHttpRequest可以在不刷新页面的情况下请求特定URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest在AJA…

数据输入输出流(I/O)

文章目录 前言一、数据输入输出流是什么?二、使用方法 1.DataInputStream类2.DataOutoutStream类3.实操展示总结 前言 数据输入输出流也是将文件输入输出流打包后使用的对象。相比于文件输入输出流,数据输入输出流提供了简单易用的方法去操作不同类型的数…

【FreeRTOS】常用API接口

【FreeRTOS】常用API接口 为方便快速检索,这里只留下对应的接口名和功能注释,具体传参和使用方法拿函数名百度搜。 任务相关 xTaskCreate() //创建任务 vTaskDelete( NULL ); //删除任务,传入NULL为删除当前的任务 vTaskStartScheduler()&…

【微服务】spring读取配置文件多种方式深入详解

目录 一、前言 二、java配置文件介绍 2.1 java配置文件产生原因 2.2 项目使用配置文件好处 2.3 springboot项目配置文件的必要性 2.4 微服务架构下配置文件使用场景 三、java读取配置文件常用方法 3.1 使用Properties类读取配置文件 3.1.1 使用getResourceAsStream读取…