Java中的基础知识

news2024/10/7 11:22:10

导言:

在Java中有很多与C语言类似的语法,但其中又有不同之处。本篇文章主要对java中的数据类型,变量以及类型转换进行简单的介绍,并指出与C的相同与不同之处。

目录

导言:

正文:

一.数据类型

二.变量

三.类型转换 

 四.类型提升

总结: 


正文:

一.数据类型

Java中的数据类型分为两类:基本数据类型和引用数据类型。

1.基本数据类型

Java中的基本数据类型包括四类,整型、两种浮点型、一种字符型和一种布尔型,如下表所示:

注意:

  • 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
  • 整形和浮点型都是带有符号的
  • 整型默认为int型,浮点型默认为double
  • char类型在Java中占两个字节,可以存一个汉字
  • 布尔类型占多少字节官方并没有给出确切的答案,但大部分的编译器都设置为了一个字节。

2.引用数据类型

Java中的引用数据类型包括类、接口、数组等,它们都是通过引用来访问的,存储的是对象的地址。引用数据类型在使用时需要先创建对象,然后使用引用来访问对象的属性和方法。这里对其进行一些简单的介绍。

类是Java中最基本的引用数据类型,它是一种自定义的数据类型,用于封装数据和方法。通过定义类,我们可以创建对象,从而实现面向对象编程。类的定义包括类名、属性和方法,其中属性表示类的状态,方法表示类的行为。下面是一个简单的类定义示例:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

接口 

接口是一种特殊的引用数据类型,它定义了一组方法的签名,但没有实现这些方法的代码。通过实现接口,我们可以为类添加新的行为。接口的定义包括接口名、方法签名和常量。下面是一个简单的接口定义示例:

public interface Shape {
    double getArea();
    double getPerimeter();
}

数组

数组是一种容器,用于存储相同类型的数据。数组的元素可以是基本数据类型或引用数据类型。数组的定义包括数组类型、数组名和数组长度。下面是一个简单的数组定义示例:

int[] nums = new int[5];

二.变量

变量是用来存储数据的容器。变量具有特定的数据类型,可以存储不同类型的数据,包括基本数据类型和引用数据类型。变量在使用之前需要先声明,并且可以赋予初始值。

1.变量的声明和初始化

在Java中,变量需要先声明后使用。变量的声明包括变量的类型和名称。变量的初始化是指为变量赋予初始值。变量的初始化可以在声明时进行,也可以在后续的代码中进行。以下是变量的声明和初始化示例:

int age;  // 变量的声明
age = 20; // 变量的初始化

或者可以在声明的同时进行初始化:

int age = 20; // 变量的声明和初始化

需要注意的是如果未初始化变量就进行使用,Java中会直接报错。例如:

public class test {
    public static void main(String[] args) {

     int a;
        System.out.println(a);
    }
}

2.变量的命名规则

变量的命名需要遵循一定的规则:

  1. 变量名只能由字母、数字和下划线组成。
  2. 变量名不能以数字开头。
  3. 变量名区分大小写,即ageAge是不同的变量名。
  4. 变量名不能使用Java的关键字,如intdoubleif等。
  5. 变量名应该具有描述性,能够清晰地表达变量的含义,以增加代码的可读性。
  6. 变量名应该使用驼峰命名法,即首字母小写,后面的单词首字母大写,如myVariable
  7. 如果变量名由多个单词组成,可以使用下划线分隔,如my_variable

前面四条都是硬性规定,违反会报错,后面三条都是为了养成好的编程习惯所需要的,违反并不会报错。

int age; //正确的变量名
double salary; //正确的变量名
char _grade; //正确的变量名,以下划线开头
boolean isStudent; //正确的变量名,以字母开头,且使用驼峰命名法
int 1score; //错误的变量名,以数字开头
double Salary; //正确的变量名,区分大小写

3.具体类型的变量

以不同的数据类型可以定义不同类型的变量,大体分为整形变量,字符变量和浮点型变量等。整形变量中又包含了:整形变量,长整形变量,短整形变量,字节型变量。浮点型变量中包括:双精度浮点型和单精度浮点型。由于基本数据类型的变量都大同小异,这里就简单讨论下浮点型变量的细节。

先看一段代码:

        int a = 1;
        int b = 2;
        System.out.println(a / b);

该运算结果为0.

在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分)。如果想得到 0.5, 需要使用 double 类型计算。

再来看一段代码:

  double num = 1.1;
        System.out.println(num * num); 

运行结果如下: 

这是由于浮点数在计算机中以二进制表示,而二进制无法精确表示某些十进制小数。在这种情况下,计算机会尽可能地近似表示这个小数。所以,虽然1.1乘以1.1的结果是1.21,但由于浮点数的精度限制,计算机会返回一个近似的结果1.2100000000000002。
在Java中使用双精度浮点数需要有几点注意的:

1. double在任何系统下都占8个字节
2. 浮点数与整数在内存中的存储方式不同,不能单纯使用的形式来计算
3. double的包装类型为Double

4. double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。

三.类型转换 

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。

例如:

int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败

运行结果如下: 

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。 

1.隐式类型转换(自动类型转换): 隐式类型转换是指在一定条件下,Java编译器会自动将一种数据类型转换为另一种数据类型,而无需显式地进行类型转换。隐式类型转换的规则如下:

  • 从小范围类型到大范围类型:byte -> short -> int -> long -> float -> double
  • char 类型可以隐式转换为 int 类型
  • 当运算符两边的操作数类型不同时,会自动将较小范围的类型转换为较大范围的类型

2.显式类型转换(强制类型转换): 显式类型转换是指在需要将一个较大范围的数据类型转换为较小范围的数据类型时,需要使用强制类型转换操作符来进行显式类型转换。显式类型转换的语法如下: 

  • 目标类型变量 = (目标类型) 原始值;
  • 显式类型转换可能会导致数据丢失或溢出,需要注意数据的范围和精度。

例如,将一个整数类型转换为浮点数类型:

int num1 = 10;
float num2 = num1; // 隐式类型转换

int num3 = 20;
double num4 = (double) num3; // 显式类型转换

 进行类型转换时需要注意以下几点:

1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换

 四.类型提升

在Java中,当两个不同类型的操作数进行运算时,会发生类型提升(也称为自动类型转换)。类型提升是指将操作数中的某个类型自动提升为更高的类型,以便进行运算。

ava中的类型提升规则如下:

  • 如果两个操作数都是整数类型,那么它们将被提升为相同的类型,优先级为long > int > short > byte。
  • 如果一个操作数是整数类型,另一个操作数是浮点类型,那么整数类型将被提升为浮点类型。
  • 如果两个操作数都是浮点类型,那么它们将被提升为相同的类型,优先级为double > float。

例如,当一个int类型的变量和一个double类型的变量进行运算时,int类型的变量会被自动提升为double类型,如下所示:

int num1 = 10;
double num2 = 3.14;
double result = num1 + num2; // num1会被自动提升为double类型

同时如果不注意类型提升也会出现一些问题:

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);

 该代码会报错:

 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误。

总之类型提升会遵循下面两点:

1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

总结: 

java中很多的基础知识与c语言一样,但细节上又有些不同,在学习时要格外注意两者的联系与区别,以免混淆。希望本文对你有所帮助。

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

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

相关文章

win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙

问题:想连接蓝牙耳机,显示无法连接,在设备上打开蓝牙 解决方法 按照以下步骤执行冷重启:长按电源按钮10s,直到屏幕关闭,然后松开。拔下电脑的电源线,等30s,再次打开设备

【尘缘赠书活动第二期】:信息科技风险管理

引言 信息科技对金融业务发展所起的作用是举足轻重的。近年来,金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员,我们笃信信息科技是一个非常有用的工具,一个兼具产品思维和管理思维、拥有高质增效能力的工具。 …

基于机器视觉的图像拼接算法 计算机竞赛

前言 图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧,…

从顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错误信息并退出运行

从顺序表中删除其值在给定值s与t之间&#xff08;要求s<t&#xff09;的所有元素&#xff0c;若s或t不合理或顺序表为空&#xff0c;则显示出错误信息并退出运行。 顺序表定义及初始化 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define MaxSize 10//定义…

浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍

安科瑞虞佳豪 车桩比降低是完善新能源汽车行业配套的一大重要趋势&#xff0c;目前各国政府都在努力推进政策&#xff0c;通过税收减免、建设补贴等措施提升充电桩建设速度&#xff0c;以满足新能源汽车需求。 近年来&#xff0c;在需求和技术的驱动下&#xff0c;充电桩的平…

QT QProcess的使用

定义 The QProcess class is used to start external programs and to communicate with them. QProcess类是用来启动一个外部程序并与之通信。 本文福利&#xff0c;莬费领取Qt开发学习资料包、技术视频&#xff0c;内容包括&#xff08;Qt实战项目视频教程代码&#xff0c;…

MySQL初始化之后启动报错(mysqld: Table ‘mysql.plugin‘ doesn‘t exist)

报错场景 初始化之后&#xff0c;服务无法启动。错误日志error-log 报错如下&#xff1a;&#xff08;mysql库下的系统表不存在&#xff09; 2023-10-26T06:03:08.150163-00:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-10-26T06:03:08.496…

RabbitMQ生产者的可靠性

目录 MQ使用时会出现的问题 生产者的可靠性 1、生产者重连 2、生产者确认 3、数据持久化 交换机持久化 队列持久化 消息持久化 LazyQueue懒加载 MQ使用时会出现的问题 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产…

linux音频-IIS音频接口

IIS 总线 IIS(Integrate Interface of Sound)即集成音频接口&#xff0c;在上个世纪 80 年代首先被 Philips 公司用于消费产品的音频设备&#xff0c; I2S规范 I2S总线只能用来处理audio data&#xff0c;而别的信号比如控制信号&#xff0c;编码信号则交给别的模块处理。为了…

The Gradle daemon may be trying to use ipv4 instead of ipv6.

重新配置了jdk和gradle&#xff0c;导致新创建的项目都会报该错误。以下是解决办法。 mac的环境 一 改项目JDK的位置 如果一没有解决接着配置 vim ~/.bash_profile 新增 export _JAVA_OPTIONS“-Djava.net.preferIPv4Stacktrue” 参考&#xff1a; https://sites.google.com…

618京东到家APP-门详页反爬实战

一、背景与系统安全需求分析 1. 系统的重要性 上图所示是接口所属位置、对电商平台或在线商店而言,分类查商品都是很重要的,通过为用户提供清晰的商品分类,帮助他们快速找到所需产品,节省浏览时间,提升购物效率,是购物结算产生GMV的核心环节。那么电商平台为什么都很看重…

Creaform形创HandySCAN MAX三维扫描仪大型零部件尺寸测量设备

CASAIM中科院广州电子智能制造事业部连续多年荣获形创Creaform战略级代理商证书。战略级代理商是形创Creaform最高级别的合作伙伴。 2023年CASAIM中科院广州电子智能制造事业部的形创Creaform战略级代理商证书&#xff1a; Creaform 形创是便携式三维测量解决方案和工程服务领…

“摸不着”的数字孪生,如何带来“看得见”的数据效益?

目录 数字孪生的6问6答 01 何为数字孪生&#xff1f; 02 数字孪生的地位与趋势如何&#xff1f; 03 哪些行业在关注和应用数字孪生&#xff1f; 04 数字孪生的应用场景有哪些&#xff1f; 05 数字孪生与智能制造的关系&#xff1f; 06 如何利用数字孪生 第一步&#xf…

QuestPass来袭,500万SUI奖池拉满并降低获奖难度!

自上周Quest 3规调整后&#xff0c;社区的担忧和反馈减少&#xff0c;但是我们仍然看到一些用户在达到资格以及争取奖励方面遇到困难。感谢你们抽出时间与我们反馈这些问题&#xff0c;下面将与你们分享在Quest 3中最新调整的规则信息&#xff1a; 新增QuestPass 为了使任何人…

C语言系统化精讲(五):C语言格式化输入和运算符与表达式

文章目录 一、C语言格式化输入1.1 C语言scanf&#xff1a;读取从键盘输入的数据&#xff08;含输入格式汇总表&#xff09;1.2 C语言输入字符和字符串&#xff08;所有函数大汇总&#xff09;1.2.1 输入单个字符1.2.2 输入字符串 二、运算符与表达式2.1 运算符与表达式2.1.1 运…

我用好说 AI 画出了漫画故事

现在的 AI 有多神奇&#xff1f;我已经可以用它来 “想故事、写分镜、画漫画” 了。 这里就来秀秀用 好说 AI 做出来的一些漫画&#xff1a; 大家多少都遇到过&#xff1a;曾经有个不错的想法&#xff0c;可能只是 “一个场景”、“一句话”&#xff0c;但真的就一闪而过&…

《算法通关村——黄金挑战数组问题》

《算法通关村——黄金挑战数组问题》 数组中出现次数超过一半的数字 描述 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如&#xff1a;输入如下所示的一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次&#xff0c;超过数…

软件测试面试1000问(含答案+文档)

Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自…

Python基础教程:关于序列操作的方式方法

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 序列是指按照位置顺序来存储数据的数据结构&#xff0c;也就是说能通过数值索引进行操作。 实际上&#xff0c;python对序列的解释是&#xff1a;只要类型对象中…

C语言系统化精讲(七):C语言数组详解

文章目录 一、数组的基本概念二、一维数组2.1 一维数组的定义2.2 一维数组初始化2.3 一维数组的引用 三、二维数组3.1 二维数组的定义3.2 二维数组初始化3.3 二维数组的引用 四、C语言数组是静态的&#xff0c;不能插入或删除元素五、C语言数组的越界和溢出5.1 数组越界5.2 数组…