Java基础知识点(标识符、数据类型、变量、运算符、包机制、流程控制、方法、数组)

文章目录

  • 标识符
  • 数据类型
    • 强弱类型语言
    • 数据类型
      • 基础类型
    • 类型转换
  • 常量与变量
    • 变量的定义
    • 变量作用域
    • 变量命名规范
    • 常量
  • 运算符
  • 包机制
  • 流程控制
    • 选择结构
    • 循环结构
  • 方法(Method)
  • 数组
    • 概述
    • 申明创建
    • java.util.Arrays类

标识符

Java标识符的命名规则如下:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始;
  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合;
  • 不能使用关键字作为变量名或方法名;
  • 标识符是大小写敏感的;
  • JAVA不采用通常语言使用的ASCII字符集,而是采用unicode这样的标准的国际字符集。因此,这里的字母的含义:可以表示英文、汉字等等。

数据类型

强弱类型语言

Java是一种强类型语言,每个变量都必须申明其类型
下面是强类型语言弱类型语言的解释:

  • 强类型语言也称为强类型定义语言,要求变量的使用要严格符合规定,所有的变量必须先定义后才能使用。
  • 弱类型语言也称为弱类型定义语言,要求与强类型定义相反,例如Java Script 中 var i 可以定义任何类型。

数据类型

Java的数据类型分为两个大类:基础类型(primitive type)和引用类型(reference type)。

基础类型

下面是Java中基础数据类型:
在这里插入图片描述
位、字节、字符、编码详解

  • 位(bit):是计算机内部数据存储的最小单位,例如:11001100是一个8位的二进制数。

  • 字节(byte):是计算机中数据处理的基本单位,习惯用大写B来调试,其中1B(byte,字节) = 8bit(位);

  • 字符:是指计算机中使用的字母、数字、字和符号。

  • 常见编码:
    ASCIIS码
    1个英文字母(不区分大小写)= 1个字节空间;
    1个中文汉字 = 2个字节的空间 ;
    1个ASCII码 = 1个字节。

    UTF-8编码
    1个英文字符 = 1个字节空间;
    1个英文标点 = 1个字节;
    1个中文 = 3个字节;
    中文标点= 3个字节。

    Unicode编码
    1个英文字符 = 2个字节;
    1个英文标点 = 2个字节;
    1个中文 = 2个字节;
    1个中文 = 2个字节。

  • 操作系统32位和64位:32位操作系统只可以使用32位的CPU,64位的CPU既可以安装32位操作系统也可以安装64位操作系统。寻址能力简单来说就是支持的内存的大小,64位操作系统最多可以支持128G的内存,32位操作系统最多支持4G内存。

类型转换

  1. Java是强类型语言,因此在运算的时候,需要用到类型转换。 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化位同一类型,然后进行运算。
  2. 转换优先级:byte,short,char -> int -> long -> float -> double。
  3. 转换规则:
    • 不能对boolean类型进行类型转换;
    • 不能把对象类型转换成不相关的对象;
    • 在把容量大的类型转换成容量小的类型时必须使用强制类型转换;在转换过程中可能导致溢出或损失精度;
    • 浮点数到整数的转换是通过舍弃小数得到的,并不是四舍五入。
  4. 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型,
    • 例如:short数据类型的位数为16,可以自动转化为位数32的int类型,float的数据类型的位数是32,也可以转换为64位的double类型。
      在这里插入图片描述
  5. 强制类型转换:强制将一个类型转换另一个类型,中间可能是在丢失信息的情况下进行的转换,可能造成精度降低或者溢出。
    在这里插入图片描述 在这里插入图片描述
  6. JDK7扩展:
    二进制数:用0b开头即可,例如:int a = 0b0101,代表int a = 5。
    下划线分割符:可以用下划线来分割长的数字,例如:int a = 1_234_567。

常量与变量

变量的定义

  • 变量就是变化的量。Java是一种强类型语言,因此每个变量都必须声明其类型。
  • Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。
  • 变量在使用前都必须对其声明,只有在声明后,才能为其分配对应长度的存储单元,
    申明格式为: type varName [=value] [{,varName[=value]}] ;
    数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量。

变量作用域

  • 局部作用域(local variable):类的方法或者语句块中定义的变量,生命周期从声明位置开始到“}“截止;局部变量没有默认值,在使用前必须先声明和初始化(赋初值)在这里插入图片描述
  • 实例变量(成员变量,member variable):方法外、类的内部定义的变量,没有statc修饰,从属于对象,其生命周期伴随对象始终,如果没有进行初始化,会自动初始化成该数据类型的默认初始值。数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false。
  • 静态变量(static variable):类中独立于方法外的变量,用static修饰,从属于类,生命周期伴随类的始终,从类加载到卸载。如果没有进行初始化,会自动初始化成该类型的默认初始值。数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false。

变量命名规范

  • 所有变量、方法、类名,都应该见名知意。
  • 类成员变量、局部变量、方法名:首字母小写和驼峰原则。
  • 常量:全部大写字母和下划线。
  • 类名:首字母大写和驼峰原则。

常量

  • 初始化后不能再改变的值,是一种特殊的变量。例如:final 常量名=值;
    double PI=3.14; final String LOVE=“hello”;

  • 常量名一般使用大写字符。

运算符

Java 语言支持如下运算符

  • 算术运算符: + 、- 、* 、/ 、% 、++ 、–
  • 赋值运算符 =
  • 关系运算符: > 、< 、>= 、<= 、== 、!= 、instanceof
  • 逻辑运算符: && 、 || 、! 、 & 、 | 、^ 、~ 、
  • 位运算符: >> ,<< ,>>> (了解!!! )
  • 条件运算符 : ? (也叫三目运算符号)
  • 扩展赋值运算符:+= 、-=、*= 、/=

特殊的运算:

  • 二元运算符:
    1.如果两个操作数有一个为long,则结果也为long。
    2.没有long时,结果为int,即使操作数全为short/byte,结果也是int。
    3.如果两个操作数有一个为double,则结果为double,只有两个操作数都是float,其结果才为float。

  • 取模运算(%)
    简单来说就是取余,例如:5%3 = 2。其规律是:
    负数%负数=负数;
    负数%正数=负数;
    正数%负数=正数;

  • 一元运算符
    自增(++)自减(–),自增自减符号在前,表示先自增自减后赋值,自增自减再后,表示先赋值再自增自减。
    Java中的乘幂使用Math.pow()进行处理,Java代码中的^符号表示异或关系。

包机制

  • Java中采用包机制来处理类名的冲突问题,方便类的查找和使用。
  • 包采用了树形目录的存储方式,同一个包中的类名是不同的,不同包中的类名是可以相同的,当同时要调用两个不同包中相同类名的类时,应该加上包名进行区分。
  • 包也设定了访问权限,拥有包访问权限的类才能访问某个包中的类。
  • 包的使用用import关键字进行导入。

流程控制

Java的基本结构是顺序结构,除非特定指明,否则就是按照程序一句一句进行执行的。

选择结构

  • if单选择结构
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
  • if双选择结构
 if(布尔表达式){
   //如果布尔表达式的值为true  
}else{
    //如果布尔表达式的值为false
 }
  • if多选择结构
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
  • 嵌套if结构
if(布尔表达式 1){
 如果布尔表达式 1的值为true执行代码
 if(布尔表达式 2){
 如果布尔表达式 2的值为true执行代码
  }
} 
  • switch多选择结构
switch(expression){
  case value :
  //语句
  break; //可选
  case value :
  //语句
  break; //可选
  //你可以有任意数量的case语句 default : //可选
  //语句
}
switch case语句有如下规则:
   1.switch语句中的变量类型可以是:byte、short、int 或者 char。从 Java SE 7 开始,switch支持字符串String类型了同时case标签必须为字符串常量或字面量。
   2.switch语句可以拥有多个case 语句。每个case后面跟一个要比较的值和冒号。
   3.case语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
   4.当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break 语句出现才会跳出switch语句。
   5.当遇到break语句时,switch语句终止。程序跳转到switch 语句后面的语句执行。case语句不必须要包含break语句。如果没有break语句出现,程序会继续执行下一条case 语句,直到出现break 语句。
   6.switch 语句可以包含一个default 分支,该分支一般是switch语句的最后一个分支(可以在任何位置,但建议在最后一个)。default在没有case语句的值和变量值相等的时候执行。default分支不需要break语句。

switch case执行时,一定会先进行匹配,匹配成功返回当前case的值,再根据是否有break,判断是否继续输出,或是跳出判断。

如果case语句块中没有break语句时,匹配成功后,从当前case开始,后续所有case的值都会输出。如果后续的case语句块有break语句则会跳出判断。【case穿透】

循环结构

  • while循环
while( 布尔表达式 ) {
//循环内容
}
  • do…while循环
do {
//代码语句
}while(布尔表达式);
  • for循环
for(初始化; 布尔表达式; 更新) {
//代码语句
}
  • 增强for循环
for(声明语句 : 表达式){
//代码句子
}

方法(Method)

  • 定义解释
    1.Java方法是语句的结合,它们组合在一起执行一个功能。
    2.方法是解决一类问题的有序组合;方法包含于类中或者对象中;方法在程序中被创建,在其他地方被引用。
    3.设计方法原则:方法的本意就是功能块,就是实现某个功能的语句块的集合。因此在设计时,最好保持方法的原子性,也就是一个方法只完成一个功能,这样有助于后期的扩展。

  • 方法的定义

修饰词 返回值类型 方法名(参数类型 参数名) {
  ...
  方法体
   ...
  return 返回值;
}
  • 方法参数类型
    1.形参。
    方法参数列表中的参数就是方法的形参(形式上参数)。
    2.实参。
    调用方法是向方法传递的参数就是实参(实际上参数)

  • 方法的调用
    Java方法的调用参数传递的值传递,其有如下好处:
    1.只规定一种传递方式,简单易懂。
    2.传递的是数据副本,不是原始数据,在方法中不能根据参数修改原始数据,更加安全。
    3.只传递数据副本,而不是整个数据对象,减少内存开销和时间消耗。
    调用参数是基础类型的时候,使用的是值传递,参数是引用类型时候,形参传递的是该对象的内存地址,是引用传递。

以下代码演示了 Java 中的值传递:
public class PassByValueExample {
    public static void main(String[] args) {
        int x = 5;
        System.out.println("Before method call: " + x);
        modifyValue(x);
        System.out.println("After method call: " + x);
    }

    public static void modifyValue(int value) {
        value = 10;
        System.out.println("Inside method: " + value);
    }
}

输出结果为:
Before method call: 5
Inside method: 10
After method call: 5
调用规则:
1.非静态方法(非static)被调用时,一定是使用对象进行调用的。
2.静态方法(staic)既可以使用类名进行调用,也可以使用对象进行调用。
3.静态方法与非静态方法之间的调用,一定是非静态方法调用静态方法。
  • 方法重载
    1.方法名相同,参数列表不同的两个方法就是重载方法。
    2.不能仅仅根据修饰符和返回值类型来判断是否重载。
    3.Java编辑器根据方法签名来判断那个方法应该被调用。

数组

概述

  • 定义
    数组可以看作是一个类型的所有数据的集合,有一下定义:
    1.数组是相同类型数据的有序集合。
    2.数据描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成的。
    3.其中,每一个数据称为数组的元素,每个数组元素可以通过数组下标来访问
  • 特点
    1.数组的长度是确定的,数组一旦被创建,它的大小是不可改变的。
    2.其元素是相同类型的,不允许出现混合类型。
    3.数组中的元素可以是任何类型,包括基本类型和引用类型。
    4.数组变量本身属于引用类型,数组也可以看作是对象,数组对象本身是在堆内存中。

申明创建

  • 申明创建
//有两种方式:
 - dataType[] arrayName = new dataType[arraySize];
2.dataType arrayName[] = new dataType[arraySize];
//一般建议采用第一种的风格进行声明。
  • 内存分析
    1.数组声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时候才与长度有关,因此,声明数组时不能指定其长度,例如:int a[5]非法。
    2.声明一个数组的时候,该数组并没有被真正的创建。
    3.构造一个数组,必须指定长度。

  • 三种初始化

1.静态初始化。
除了用new关键字类产生数组外,还可以直接定义数组的同时,就为数组元组分配空间并赋值。
例如:int[] a = {1,2,3};
2.动态初始化。
定义数组和为数组分配空间、赋值的操作分开进行。
例如:int[] a = new int[2];a[0]=1;a[1]=2;
3.默认初始化。
数组是引用类型,它的元素相当于类的实例变量,因此数组分配空间后,其中的每个元素都会按照数组类型进行初始化赋值,也叫隐式初始化。
  • 数组边界
    数组的下标合法区间是:[0,length-1],超过这个区间就会报错(ArrayIndexOutOfBoundsException)

java.util.Arrays类

  • 打印数组:Arrays.toString(arrayName);
  • 数组排序:Arrays.sort(arrayName);
  • 二分查找:
    先排序:Arrays.sort(arrayName);
    再查找:Arrays.binarySearch(arrayName,searchValue);
  • 元素填充:Array.fill(arrayName,indexStart,indexEnd,fillValue);
  • 数组转化为List:Array.asList(arrayName);

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

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

相关文章

SIMBA:单细胞嵌入与特征

目前大多数单细胞分析管道仅限于细胞嵌入&#xff0c;并且严重依赖于聚类&#xff0c;而缺乏显式建模不同特征类型之间相互作用的能力。此外&#xff0c;这些方法适合于特定的任务&#xff0c;因为不同的单细胞问题的表述方式不同。为了解决这些缺点&#xff0c;SIMBA作为一种图…

RabbitMQ二、RabbitMQ的六种模式

一、RabbitMQ的六种模式 RabbitMQ共有六种工作模式&#xff1a; 简单模式&#xff08;Simple&#xff09;工作队列模式&#xff08;Work Queue&#xff09;发布订阅模式&#xff08;Publish/Subscribe&#xff09;路由模式&#xff08;Routing&#xff09;通配符模式&#xff…

ThinkPHP5发送邮件如何配置?有哪些技巧?

ThinkPHP5发送邮件的性能怎么优化&#xff1f;批量发信的方法&#xff1f; 邮件发送功能是许多应用程序的关键组成部分&#xff0c;尤其是在用户注册、密码重置和通知等功能中尤为重要。AokSend将详细介绍如何在thinkphp5中配置和使用邮件发送功能&#xff0c;并确保你可以轻松…

DPDK基础组件二(igb_uio、kni、rcu)

The Linux driver implementer’s API guide — The Linux Kernel documentation 一、igb_uid驱动 参考博客:https://zhuanlan.zhihu.com/p/543217445 UIO(Userspace I/O)是运行在用户空间的I/O技术 代码位置:dpdk----/kernel/linux/igb_uio目录 igb_uio 是 dpdk 内部实…

从0开发一个Chrome插件:搭建开发环境

前言 这是《从0开发一个Chrome插件》系列的第三篇文章&#xff0c;本系列教你如何从0去开发一个Chrome插件&#xff0c;每篇文章都会好好打磨&#xff0c;写清楚我在开发过程遇到的问题&#xff0c;还有开发经验和技巧。 《从0开发一个Chrome插件》专栏&#xff1a; 从0开发一…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑动态定价的新能源汽车能源站优化运行》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Linux网络-守护进程版字典翻译服务器

文章目录 前言一、pid_t setsid(void);二、守护进程翻译字典服务器&#xff08;守护线程版&#xff09;效果图 前言 根据上章所讲的后台进程组和session会话&#xff0c;我们知道如果可以将一个进程放入一个独立的session&#xff0c;可以一定程度上守护该进程。 一、pid_t se…

Vite项目构建chrome extension,实现多入口

本项目使用Vite5 Vue3进行构建。 要使用vite工程构建浏览器插件&#xff0c;无非就是要实现popup页面和options页面。这就需要在项目中用到多入口打包&#xff08;生成多个html文件&#xff09;。 实现思路&#xff1a; 通过配置vite工程&#xff0c;使得项目打包后有两个h…

项目3 构建移动电商服务器集群

项目引入 经过前期加班加点地忙碌&#xff0c;我们的网站顺利上线了&#xff01;年中促销活动也如约而至&#xff0c;虽然公司全体对这次活动进行多方面地准备和“布防”&#xff0c;可是意外还是发生了。就在促销优惠购物活动的当天&#xff0c;猛然增加的用户访问量直接导致浏…

SpringBoot-SchedulingConfigurer源码初识:理解定时任务抛异常终止本次调度,但不会影响下一次执行调度

SchedulingConfigurer源码初识&#xff1a;理解定时任务抛异常终止本次调度&#xff0c;但不会影响下一次执行调度 EnableSchedulingScheduledAnnotationBeanPostProcessor进入finishRegistration方法 ScheduledTaskRegistrar处理触发器任务&#xff08;TriggerTask&#xff09…

回溯算法之电话号码字母组合

题目&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "2…

【python】多线程(3)queue队列之不同延时时长的参数调用问题

链接1&#xff1a;【python】多线程&#xff08;笔记&#xff09;&#xff08;1&#xff09; 链接2&#xff1a;【python】多线程&#xff08;笔记&#xff09;&#xff08;2&#xff09;Queue队列 0.问题描述 两个线程&#xff0c;但是不同延时时长&#xff0c;导致数据输出…

vue 引用第三方库 Swpier轮播图

本文全程干货&#xff0c;没有废话 1.使用 npm 安装 swiper&#xff0c;使用 save 保存到 packjson 中 npm install --save swiper 2、把 swiper看成是第三方库或者是组件&#xff0c;然后按照&#xff0c;引用&#xff0c;挂载组件&#xff0c;使用组件三步法。 3、在 script…

overleaf 写参考文献引用

目录 1、 新建.bib 文件 2、导入引用 3、在文档中引用参考文献 4、生成参考文献列表 1、 新建.bib 文件 在Overleaf项目中&#xff0c;你可以选择导入现有的 .bib 文件或在项目中创建一个新的 .bib 文件来管理你的参考文献。 导入.bib 文件&#xff1a; 在项目文件树中点击…

1985-2020 年阿拉斯加和育空地区按植物功能类型划分的模型表层覆盖率

ABoVE: Modeled Top Cover by Plant Functional Type over Alaska and Yukon, 1985-2020 1985-2020 年阿拉斯加和育空地区按植物功能类型划分的模型表层覆盖率 简介 文件修订日期&#xff1a;2022-05-31 数据集版本: 1.1 本数据集包含阿拉斯加和育空地区北极和北方地区按…

C语言| 输出菱形*

C语言| 输出*三角形-CSDN博客 输出菱形。 【分析思路】 学会输出*的三角形之后输出菱形就很简单了。我们分析一下&#xff0c;菱形是由两个对称的三角形组成的&#xff0c;也因为是对称的&#xff0c;所以输出的菱形的行数肯定是一个奇数。 1 我们在编程的时候&#xff0c;要…

网络空间安全数学基础·循环群、群的结构

3.1 循环群&#xff08;重要&#xff09; 3.2 剩余类群&#xff08;掌握&#xff09; 3.3 子群的陪集&#xff08;掌握&#xff09; 3.4 正规子群、商群&#xff08;重要&#xff09; 3.1 循环群 定义&#xff1a;如果一个群G里的元素都是某一个元素g的幂&#xff0c;则G称为…

【SpringBoot】四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件

本文摘要&#xff1a;四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件 &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。公粽号&#xf…

python dlib 面部特征点检测

运行环境macos m2芯片 Python 3.11.7&#xff0c;python3.9都能通过&#xff0c;windows系统应该也是一样的效果 import dlib import cv2 import matplotlib.pyplot as plt# Load the image image_path path_to_your_image.jpg # Replace with the path to your image image…

React常见的一些坑

文章目录 两个基础知识1. react的更新问题, react更新会重新执行react函数组件方法本身,并且子组件也会一起更新2. useCallback和useMemo滥用useCallback和useMemo要解决什么3. react的state有个经典的闭包,导致拿不到最新数据的问题.常见于useEffect, useMemo, useCallback4. …