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

news2024/11/16 2:35:28

文章目录

  • 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.coloradmin.cn/o/1612419.html

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

相关文章

【MyBatis】(MyBatis 其他查询操作 多表查询 #{} 和 ${} 排序功能 like 查询 #{} 和 ${} 的区别 数据库连接池)

文章目录 MyBatis其他查询操作多表查询#{} 和 ${}排序功能like 查询#{} 和 ${} 的区别 数据库连接池 MyBatis 其他查询操作 创建表: -- 创建⽂章表 DROP TABLE IF EXISTS articleinfo; CREATE TABLE articleinfo (id INT PRIMARY KEY auto_increment,title VARCH…

2024/4/19学习笔记 vector模拟实现(2)

本次学习重点 1.迭代器区间构造和size_t n 构造 2.string扩容问题 3.erase的缺陷 1.迭代器区间构造和size_t n 构造 vector支持用一段迭代器区间构造&#xff0c;也可以支持任意类型的迭代器区间&#xff0c;所以要写成函数模板 template <class InputIterator> ve…

SL7220线性降压恒流3.6A 外围只需两个电阻 耐压40V汽车大灯IC

概述&#xff1a; SL7220 是一款双路线性降压LED恒流驱动器&#xff0c;外围只需两个电阻&#xff0c;输出电流10MA-3600MA。 SL7220 内置过热保护功能&#xff0c;内置输入过压保护功能。 SL7220 静态电流典型值为120uA。 特点 ●输入电压范围&#xff1a;2.5V-40V ●电…

浅识数据结构之时间复杂度

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 文章目录 前言一. 时间复杂度1.1 时间复杂度的概念1.2 时间复杂度如何计算1.3 时间复杂度如何表…

谷歌地球引擎Google Earth Engine下载数字高程模型DEM数据的方法

本文介绍在谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;中&#xff0c;批量下载指定时间与空间范围内的数字高程模型&#xff08;DEM&#xff09;数据的方法。 本文是谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;系列…

c语言中的数组

数组 数组是一种构造类型&#xff0c;是由基本类型构造而成。当我们想用一群变量来描述同一类相同的东西时候&#xff0c;比如100个年龄变量&#xff0c;我们可以这样int age1&#xff1b;int age2&#xff1b;int age3&#xff1b;……int age 100;这样即不方便书写&#xff…

GPU异构内存管理

通过异构内存管理简化 GPU 应用程序开发 异构内存管理 (HMM) 是一项 CUDA 内存管理功能&#xff0c;它扩展了 CUDA 统一内存编程模型的简单性和生产力&#xff0c;以包括具有 PCIe 连接的 NVIDIA GPU 的系统上的系统分配内存。 系统分配内存是指最终由操作系统分配的内存&#…

深入理解MD5:Message Digest Algorithm 5

title: 深入理解MD5&#xff1a;Message Digest Algorithm 5 date: 2024/4/21 18:10:18 updated: 2024/4/21 18:10:18 tags: MD5哈希函数密码学数据完整性碰撞攻击安全性替代算法 导论 MD5的背景和历史 MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种广泛使用…

Axure引用ECharts图表 解决火狐浏览器出错

Axure原型添加Echarts图表&#xff0c;没耐心看文章的可以直接下载示例 Axure中使用ECharts图表示例 1. 打开Axure新建页面 2. 页面添加元件 元件类型随意&#xff0c;矩形、动态面板、热区、图片 甚至段落都可以3. 命名元件 随意命名&#xff0c;单个页面用到多个图表时名…

dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

安装IntelliJ IDEA

文章目录 一、前言二、下载IDEA三、安装四、破解 一、前言 工欲善其事必先利其器&#xff0c;学习JAVA的第一步&#xff0c;首先是安装IDE&#xff0c;配置环境&#xff1b; 常用的JAVA IDE是IntelliJ IDEA和eclipse&#xff0c;我选择IntelliJ IDEA 二、下载IDEA 官网下载&…

游戏测试之常见控制技能(下)

备注&#xff1a;未经博主允许禁止转载 个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_w…

C++11 数据结构5 队列的概念,队列的顺序存储,实现,测试

一&#xff0c;队列的概念 队列是一种特殊的受限制的线性表。 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的t&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIF…

数据库管理-第171期 Oracle是用这种方式确保读一致的(20240418)

数据库管理171期 2024-04-18 数据库管理-第171期 Oracle是用这种方式确保读一致的&#xff08;20240418&#xff09;1 基本概念2 用处3 注意事项总结 数据库管理-第171期 Oracle是用这种方式确保读一致的&#xff08;20240418&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#x…

Redis系列之哨兵Sentinel集群搭建

在上一篇博客&#xff0c;我们已经知道怎么搭建一个redis主从复制集群&#xff0c;但是主从集群如果出现服务器宕机的情况&#xff0c;是不会自动选举master的&#xff0c;所以需要搭建更加高可用的集群模式&#xff0c;哨兵模式&#xff0c;哨兵集群会自动监控&#xff0c;如果…

深度学习发展中的继承和创新

深度学习是一步一步发展而来的&#xff0c;新的成就也是在原有的基础上&#xff0c;逐步取得突破&#xff0c;有一些东西是一点一点变化&#xff0c;突破发展而来的&#xff0c;也就是每一次小的突破和每一次小的突破累积起来&#xff0c;构成一个明显的进步。我们可以通过观察…

python 文件 成绩分析2

‘’’ 文件score.txt中存储了学生的考试信息,内容如下 小明,98,96 小刚,90,94 小红,90,94 小王,98,96 小刘,80,90 小赵,90,96 第二列是数学成绩&#xff0c;第三列是语文成绩 请写程序分析&#xff1a; 哪些同学语文成绩是相同的?哪些同学数学成绩是相同的?哪些同学语文和数…

C语言—字符指针,指针数组和数组指针详解

字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* ; int main() {char ch w;char *pc &ch;*pc w;return 0; }还有一种使用方式如下&#xff1a; int main() {const char* pstr "hello world.";//这里是把一个字符串放到pstr指针变量里了吗…

WebSocket 快速入门 - springboo聊天功能

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

Linux安装Docker完整教程及配置阿里云镜像源

官网文档地址 安装方法 1、查看服务器内核版本 Docker要求CentOS系统的内核版本高于3.10 uname -r #通过 uname -r 命令查看你当前的内核版本2、首先卸载已安装的Docker&#xff08;如果有&#xff09; 2.1 确保yum包更新到最新 yum update2.2 清除原有的docker&#xff0c…