从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.hqwc.cn/news/637045.html

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

相关文章

【Java基础】19.继承(面向对象的三大特征:封装、继承、多态)

文章目录 前言一、继承的概念二、继承的步骤1.类的继承格式2.继承的实例3.继承类型 三、继承的特性四、继承的关键字1.extends关键字2.implements关键字3.super 与 this 关键字4.final 关键字 五、构造器 前言 一、继承的概念 继承是java面向对象编程技术的一块基石&#xff…

JavaCard学习笔记: CAP Component 之 Class Component

文章目录 整体结构tag和size字段signature_pool_length和signature_pooltype_descriptor结构导入类型编码导入项签名示例导入类导入数组导入远程方法 interfaces[]interface_info结构flagsinteface_countsuperinterfacesinterface_name class_info_compact classes[]结构flagsi…

动手写sql 《牛客网80道sql》

第1章:SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件,用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…

rust 卸载重新安装 安装

原因:接触区块链时报错 linking with x86_64-w64-mingw32-gcc failed: exit code: 1 Rust编译需要C环境,如果你没有,Rust也能安装成功,只是无法编译代码 C的编译工具有两个,一个是msvc,也就是visual studi…

程序员修炼之道 05:务实的方法②

不记录,等于没读。 这里是我阅读《程序员修炼之道》这本书的记录。 本章继续介绍一些提示和技巧。无论是编写代码还是做架构设计,又或者是写文档或估算进度,这些提示和技巧适用于软件开发的所有层级。只要在开发过程中牢记这些基本原则&…

大数据学习的第三天

文章目录 学习大数据命令的方式查看文件拷贝文件的方式添加数据的方式 出现了问题移动文件 hadoop工作流程和工作机制的方式namenodedatanodesecondarynamenode(主节点) 学习大数据命令的方式 查看文件 hadoop fs -cat /test/2.txt下载文件 hadoop fs -get -f /test/2.txt-f …

Python | Leetcode Python题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right 0, len(nums) #采用左闭右开区间[left,right)while left < right: # 右开所以不能有,区间不存在mid left (right - left)//2 # 防止溢出…

【Python】使用Python计算简单数值积分

题外话&#xff0c;Python语言命名的来源&#xff1a;&#xff08;见下图&#xff09;Monty Python巨蟒剧团 1、积分题目&#xff08;3&#xff09; 2、解析解答 3、Python计算代码 import math import scipy.integrate as integrate# 积分区间 # x_min 0.0 # 1 # x_min …

CSS显示模式

目录 CSS显示模式简介 CSS显示模式的分类 块元素 行元素 行内块元素 元素显示模式的转换 使块内文字垂直居中的方法 设计简单小米侧边栏&#xff08;实践&#xff09; CSS显示模式简介 元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0…

ccfcsp201312-2 ISBN号码

注意&#xff1a;50分 -- u10&#xff0c;最后一位为X 代码&#xff1a; #include <bits/stdc.h> using namespace std; string s; int a[12]; int main() {cin >> s;a[1] s[0] - 0;a[2] s[2] - 0;a[3] s[3] - 0;a[4] s[4] - 0;a[5] s[6] - 0;a[6] s[7] - …

C#随机数

随机数&项目调试 随机数 文章目录 随机数1、创建随机数对象2、生成随机数思考 打怪兽 项目调试 1、创建随机数对象 Random r 随机数变量名 new Random();2、生成随机数 Randowm r new Random(); int i r.Next(); //生成一个非负数的随机数 Console.WriteLine(i); i …

opencv的cmake报错

opencv编译报错 CMakeDownloadLog.txt #use_cache "D:/opencv/.cache" #do_unpack "ippicv_2021.8_win_intel64_20230330_general.zip" "71e4f58de939f0348ec7fb58ffb17dbf" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/1…