当前位置: 首页 > news >正文

我不想学JAVA---------JAVA和C的区别

前言

我一个研究方向是SLAM的为什么要来学JAVA。
从九月份开学到现在,已经学了Linux,数据结构,SLAM,C++的基础操作,期间还参与编写了一本VHDL的教材。还有上课、考试什么的其他杂七杂八的事情就不说了。
读研好苦逼,研究方向是SLAM后面还要深入学习,JAVA(部署云服务器),C++(优化SLAM算法发论文),ROS(SLAM植入机器人)感觉好累了,根本学不完。哎!
哦对了,JAVA除了部署云服务器,还要弄安卓APP的开发,有没有大佬知道小白从0开始真的能弄完这些吗。。。。。。。。。。。。。
读研就是这么苦.

文章目录

  • 前言
  • 1.认识JAVA
  • 2.JAVA的基础语法与C不同的地方
    • 2.1 数据类型
    • 2.2 运算符
    • 2.3 逻辑控制
    • 2.4 输入输出
    • 2.5 JAVA方法的使用
    • 2.6 数组的定义与使用
    • 2.7 类和对象
    • 2.8 继承和多态


1.认识JAVA

JAVA主要有前端,后端,测试和测试开发
前端就是能看见的(网页啥的),后端是看不见的(处理数据),测试就是测试程序的,测试开发就是开发测试工具的。用一张图来表示吧:
在这里插入图片描述
然后JAVA比较重要的就是一个JDK,JDK里面就包含了javac和java工具,Java程序最终是在JVM(Java虚拟机)中运行的。
在这里插入图片描述

2.JAVA的基础语法与C不同的地方

2.1 数据类型

数据类型上,除了C有的int,long,float,double,char之外,JAVA中有个byte的类型占1字节。
然后还有个boolean类型,和C中的bool很想。但是在JAVA中输出只有true和false

int a = 10;
long b = 10; // long定义的长整型变量
long c = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
long d = 10l; // 一般更加以加大写L,因为小写l与1不好区分

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

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

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。
①自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。
②强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。

字符串类型:

public static void main(String[] args) {
String s1 = "hello";
String s2 = " world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2); // s1+s2表示:将s1和s2进行拼接//int转string
int num = 10;// 方法1
String str1 = num + "";// 方法1
String str2 = String.valueOf(num);// 方法2//string转int
String str = "100";
int num = Integer.parseInt(str);
}String s3 = 10+20+"x";
String s4 = "x"+10+20;
System.out.println(s3);//输出30x
System.out.println(s4);//输出x1020

2.2 运算符

运算符没啥可说的,大部分都一样

System.out.println(11.5 % 2.0);//JAVA可以除小数,输出1.5
int a = 10;
int b = 20;
//就是刚才说的,JAVA是直接输出true和false
System.out.println(a == b); // false
System.out.println(a != b); // true

然后还有左移和右移相关的东西:
在这里插入图片描述

2.3 逻辑控制

在这里插入图片描述
JAVA的switch中,string也可以作为输入
在这里插入图片描述

2.4 输入输出

JAVA的输出有三种形式:
在这里插入图片描述
JAVA的输入也和C不一样,比较复杂
在这里插入图片描述

2.5 JAVA方法的使用

在这里插入图片描述
不过JAVA比C有个好处,就是不用在意自定义函数的位置,而C调用的函数必须要在使用的函数之前!!!!

其在自定义函数的时候有个东西叫做方法重载,具体如下,同一个方法名可以多次定义,不过有条件:

在这里插入图片描述

2.6 数组的定义与使用

在这里插入图片描述

null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用. null 的作用类似于 C 语言中的 NULL (空指针),都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出 NullPointerException
JAVA里面没有指针!!!

JAVA的数组传参:
在这里插入图片描述
感觉比C的指针好理解,更好上手使用一些。关于数组,JAVA还有一些相比C更方便的东西。
在这里插入图片描述
关于二维数组,可以看如下:
在这里插入图片描述

2.7 类和对象

首先先来看一下什么是类,什么是对象吧
在这里插入图片描述
this还有很奇特的用法:
this();
调用当前类中的其他构造方法!其只能在当前的构造方法内部来使用!并且只能在第一行!
比如:

Public Student(){
this("cc",18);
System.out.println("不带参数的构造方法");
}Public Student(string name,int age){
this.name = name;
this.age = age;
System.out.println("带参数的构造方法");
}
//this("cc",18)就会进入下面含有参数的构造方法中!!!

在这里插入图片描述
下来看看包,啥是包,包能干啥?

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件下,也可以对某个文件夹下的音乐进行更详细的分类.

在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

Java 中已经提供了很多现成的类供我们使用. 例如Date类:可以使用 java.util.Date 导入 java.util这个包中的 Date类,也就是我们使用Arrays等的时候上面自动弹出的import那个东西。

import java.util.*;//这样写比较吊,*可以直接包含你的Date,Arrays等,相当于万能,但是也不能完全用*
import java.sql.*;
public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();//所以要这样直接写出是until下的Date才行
System.out.println(date.getTime());
}
}

util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
import 和C/C++ 的 #include 差别很大. C/C++ 必须 #include 来引入其他文件内容, 但是 Java 不需要.import 只是为了写代码的时候更方便. import 更类似于 C/C++ 的 namespace 和 using

然后还可以自定义包: 在这里插入图片描述
关于static静态变量:
在这里插入图片描述
简单说,你是一个普通成员方法,你就拿对象引用去调。你是一个静态方法,你就拿类名去调。

然后我们再看看什么是代码块,代码块是干啥的?
使用 {} 定义的一段代码称为代码块。

static {classRoom = "109";System.out.println("静态代码块!1");}
//也就是拿static修饰的代码块{this.name = "xiaoli";this.age = 19;System.out.println("实例代码块!");}

静态代码块要比其他代码块先运行!并且静态代码块只执行一次!
①静态代码块不管生成多少个对象,其只会执行一次
②静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
③如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
④实例代码块只有在创建对象时才会执行

2.8 继承和多态

先来看看什么是继承
继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。
在这里插入图片描述

在这里插入图片描述

在子类构造方法中,并没有写任何关于基类构造的代码,但是在构造子类对象时,先执行基类的构造方法,然后执行子类的构造方法,因为:子类对象中成员是有两部分组成的,基类继承下来的以及子类新增加的部分。父子肯定是先有父再有子,所以在构造子类对象时候,先要调用基类的构造方法,将从基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整 。 注意:

  1. 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构 造方法
  2. 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的 父类构造方法调用,否则编译失败。
  3. 在子类构造方法中,super(…)调用父类构造时,必须是子类构造函数中第一条语句。
  4. super(…)只能在子类构造方法中出现一次,并且不能和this同时出现

除此之外,还有
1、父类静态代码块优先于子类静态代码块执行,且是最早执行
2、父类实例代码块和父类构造方法紧接着执行
3、子类的实例代码块和子类构造方法紧接着再执行
4、第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行

然后还有一个protected
主要限定:类或者类中成员能否在类外或者其他包中被访问,在其他包中访问要使用super哦!

至于继承方式,JAVA可以
单继承,多层继承,不同类继承同一个类,
但是不能一个类继承多个类(多继承不允许)
在这里插入图片描述
在这里插入图片描述
final修饰常量,常量不能被修改。
在这里插入图片描述
上面array1当中存储的是地址,所以不能改。
array1[0]=99;这样是没有问题的。虽然改变了数组,但是array1存储的是地址,不影响!
在这里插入图片描述
继承看完了,那什么是多态呢??

想理解多态我们首先要知道五件事:
1.向上转型
2.子类和父类 方法重写/方法覆盖
3.通过父类对象,调用父类和子类重写的方法
4.动态绑定(满足上述三点)
5.动态绑定与静态绑定
在这里插入图片描述
以上是多态的最基本的东西,当然这些东西还有很多相似点需要区分,分别是方法重写和方法重载的区别,以及向下转型的相关知识,看下图即可。
在这里插入图片描述
在这里插入图片描述
看了方法重写与方法重载的区别以及向下转型后,让我们继续来看什么是多态:
在这里插入图片描述

如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低.对于类的调用者来说(drawShapes方法),只要创建一个新类的实例就可以了, 改动成本很低.而对于不用多态的情况, 就要把 drawShapes 中的 if - else进行一定的修改, 改动成本更高.

多态缺陷:代码的运行效率降低

相关文章:

我不想学JAVA---------JAVA和C的区别

前言 我一个研究方向是SLAM的为什么要来学JAVA。 从九月份开学到现在,已经学了Linux,数据结构,SLAM,C的基础操作,期间还参与编写了一本VHDL的教材。还有上课、考试什么的其他杂七杂八的事情就不说了。 读研好苦逼&…...

不能错过的AI前沿开源工具!

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…...

为什么深度学习神经网络可以学习任何东西

下图你所看到的,是著名的曼德尔布罗特集,我们可以见证这个集合呈现出的复杂形态: 要理解神经网络如何学习曼德尔布罗特集,我们首先需要从最基础的数学概念讲起:什么是函数?函数本质上是一个将输入转化为输出…...

使用 SpringSecurity 发送POST请求出现 403

问题场景 在使用 SpringSecurity 时对一些访问权限进行了设置, 在用户请求资源时出现了403错误 , 通过检查代码发现请求权限是开放的, 并且切换成 GET 请求也是可以通过, 换成POST 请求就无法通过。 解决方法 在 SpringSecurity 中关闭 CSRF 因为 前端向后台发送 post 请求…...

解决Typora笔记上传到CSDN上图片无法显示的问题

解决Typora笔记上传到CSDN上图片无法显示的问题 一、发现问题二、分析问题三、解决问题图床介绍所需工具PicGo软件安装操作下载安装PicGo配置PicGo 设置Typora 四、总结 一、发现问题 当我们使用Typora这款强大的Markdown编辑器记录笔记时,经常会遇到一个让人困扰的…...

Vue3.0+Echarts (可视化界面)

Vue3.0Echarts (可视化界面) 1. 简介2. 安装2.1 下载安装Node.js2.2 全局下载项目脚手架2.3 创建项目 1. 简介 2. 安装 2.1 下载安装Node.js 2.2 全局下载项目脚手架 以管理员身份执行 npm install -g vue/cli vue --version2.3 创建项目 vue crea…...

编程语言的未来:探索技术进步的轨迹

编程语言的未来:探索技术进步的轨迹 随着科技的飞速发展,编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心,为程序员提供了与机器沟通的桥梁。然而,未来的技术进步将如何影响编程语言的走向呢?让我…...

SOLIDWORKS使用技巧——SOLIDWORKS草图绘制时一定要完全定义

SOLIDWORKS草图的定义状态有多种,按是否报错区分,如下: 1. 正常状态:欠定义、完全定义; 2. 错误状态的:过定义、悬空、无解; 其中,错误状态需要修复,不然会影响模型重…...

网络类型之GRE和MGRE和NHRP

GRE-通用路由封装 是一种简单的三层VPN封装技术,属于虚拟的点到点网络类型 优点:支持IP 网络作为承载网络、支持多种协议、支持IP 组播,配置简单,容易布署。 缺点:缺少保护功能,不能执行如认证、加密、以…...

uniapp获取日期

1.使用new Date()方法获取系统今天的日期&#xff0c;显示格式为&#xff1a;2023-10-28 <template><view class"content">{{date}}</view> </template> <script>export default {data() {return {date: new Date().toISOString().sl…...

编码和解码的未来之路

hello&#xff0c;我是小索奇。在计算机科学的世界中&#xff0c;编码和解码是无处不在的神奇力量&#xff0c;而现代技术的巅峰之一就是 ChatGPT。让我们一起探讨编码和解码如何与 ChatGPT 这一人工智能的杰作相互结合&#xff0c;打开了无限可能的数字世界之门。 ChatGPT的魔…...

Prometheus实战篇:Prometheus监控redis

准备环境 docker-compose安装redis docker-compose.yaml version: 3 services:redis:image:redis:5container_name: rediscommand: redis-server --requirepass 123456 --maxmemory 512mbrestart: alwaysvolumes:- /data/redis/data: /dataport:- "6379:6379"dock…...

Vue2.Hello World

步骤&#xff1a; 准备容器引包&#xff08;开发版本/生产版本&#xff09;创建实例new Vue()添加配置项 el指定挂载点data提供数据 准备容器 就是新建一个div标签 引包 vue2版本中文文档&#xff1a;https://v2.cn.vuejs.org/v2/guide/ 尝试 Vue.js 最简单的方法是使用 …...

【单片机项目实战】温度控制系统

本项目的主要作用是实现温度调控&#xff0c;通过设定一个预定的温度值&#xff0c;实现实时检测外界温度&#xff0c;当外界温度小于预定值时&#xff0c;电机正转&#xff0c;实现降温效果&#xff1b;当外界温度大于预定值时&#xff0c;电机反转&#xff0c;实现升温效果&a…...

SpringMVC-视图

SpringMVC中的视图实现了View接口&#xff0c;作用是渲染数据&#xff0c;将Model中的数据展示给用户。render是渲染方法&#xff0c;可以看到渲染的视图是一个View类型的对象。 SpringMVC视图的种类有很多&#xff0c;默认有转发视图和重定向视图。 如果配置了Thymeleaf视图解…...

【React系列】Hook(一)基本使用

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识hook 1.1. 为什么需要hook Hook 是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下…...

算法训练营Day28

#Java #贪心 开源学习资料 Feeling and experiences&#xff1a; 这周来到了贪心算法&#xff0c;简要概述&#xff1a; 贪心算法是一种在每个步骤中都采取最优解&#xff08;即&#xff0c;在当前看来最好的解&#xff09;的算法设计策略。它通常用于求解优化问题。这种方…...

鸿蒙OS应用开发之日期选择

前面学习了时间选择组件,实现了时间的选择,这样非常方便用户进行时间的输入,通过手动就可以输入时间,比直接文本输入要省不少时间,特别对于手机这样单手操作的设备,更加重要了。因此,日期的输入工作也不能落后,本文将要学习日期选择组件,这样就可以实现日期通过手上下…...

Mysql 查看表注释或字段注释

查看所有表的注释 SELECT table_name 表名, table_comment 表说明 FROM information_schema.TABLES WHERE table_schema ‘数据库名’ ORDER BY table_name 查询所有表及字段的注释 SELECT a.table_name 表名, a.table_comment 表说明, b.COLUMN_NAME 字段名, b.column_commen…...

MySQL InnoDB引擎

1、逻辑存储结构 2、架构 a. 内存结构 Change Buffer的意义是什么? 与聚集索引不同&#xff0c;二级索引通常是非唯一的&#xff0c;并且以相对随机的顺序插入二级索引。同样&#xff0c;删除和更新可能会影响索引树中不相邻的二级索引页&#xff0c;如果每一次都操作磁盘&am…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...