我不想学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进行一定的修改, 改动成本更高.

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

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

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

相关文章

防爆气象站跟传统气象站相比有哪些优势?

防爆气象站是一种特殊的气象站,设计用于在易燃易爆、高温、潮湿等恶劣环境下进行气象监测。以下是防爆气象站的优点: 防爆性能:防爆气象站能够承受极端恶劣的环境条件,可以在易燃易爆、高温、潮湿等危险环境下进行工作&#xff0…

2024年【北京市安全员-A证】考试试卷及北京市安全员-A证复审考试

题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-A证考试试卷考前必练!安全生产模拟考试一点通每个月更新北京市安全员-A证复审考试题目及答案!多做几遍,其实通过北京市安全员-A证在线考试很简单。 1、【多选题】《中…

ubuntu python播放MP3,wav音频和录音

目录 一.利用pygame(略显麻烦,有时候播放不太正常)1.安装依赖库2.代码 二.利用mpg123(简洁方便,但仅争对mp3)1.安装依赖库2.代码 三.利用sox(简单方便,支持的文件格式多)…

Docker安装sentinel控制台

1、拉取镜像,直接使用run命令,如果说本地没有镜像就会直接去远程仓库拉取: docker run -d \ -p 8858:8858 \ --name sentinel-dashboard \ --network demo \ -e AUTH_USERNAMEsentinel \ -e AUTH_PASSWORD123456 \ bladex/sentinel-dashboa…

Linux 进程(七) 进程地址空间

虚拟地址/线性地址 学习c语言的时候我们经常会用到 “&” 符号,以及下面这张表,那么取出来的地址是否对应的是真实的物理地址呢?下面我们来写代码一步一步的验证。 从上面这张图不难看出,从正文代码,到命令行参数环…

【vue/uniapp】使用 uni.chooseImage 和 uni.uploadFile 实现图片上传(包含样式,可以解决手机上无法上传的问题)

引入: 之前写过一篇关于 uview 1.x 版本上传照片 的文章,但是发现如果是在微信小程序的项目中嵌入 h5 的模块,这个 h5 的项目使用 u-upload 的话,图片上传功能在电脑上正常,但是在手机的小程序上测试就不会生效&#x…

CSS 缩减顶部动画

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

鸿蒙HarmonyOs:为什么不支持热更新?

学习了一段时间的鸿蒙开发&#xff0c;发现鸿蒙开发还是比较简单的&#xff0c;今天突然心血来潮&#xff0c;研究了一下鸿蒙热更新&#xff0c;最终得出的结论是鸿蒙暂时不支持热更新。 鸿蒙app开发主要是利用的ArkTs语言&#xff0c;ArkTs又是基于TypeScript语言的&#xff0…

C++基本语言:1.7string类型介绍

C基本语言包含10章节内容&#xff0c;存于C从入门到精通专栏 目录 一、前言 二、string类型简介 三、定义和初始化string对象 四、string对象上的操作 一、前言 C语言的内置类型&#xff0c;如int、float、char等&#xff0c; 这些是属于语言本身提供的。 C中&#xf…

顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音 一、添加acl 打开ccadmin->点击配置文件->点击acl.conf->在</list>后面添加一条图中的信息->muqi是我自己设置的名字你们可以修改为自己需要的名字->添加好了点击提交XML->在运维调试点…

Spring配置文件

一&#xff1a; Bean标签基本配置 1&#xff1a;用途 用于配置对象交由Spring来创建&#xff0c;默认情况下它调用的是类中的无参构造函数&#xff0c;如果没有无参构造函数则不能创建成功。 2&#xff1a;基本属性&#xff08;id&#xff09; Bean实例在Spring容器中的唯一…

YOLO+SlowFast+DeepSORT 简单实现视频行为识别

前段时间刷短视频看到过别人用摄像头自动化监控员工上班状态&#xff0c;比如标注员工是不是离开了工位&#xff0c;在位置上是不是摸鱼。虽然是段子&#xff0c;但是这个是可以用识别技术实现一下&#xff0c;于是我在网上找&#xff0c;知道发现了 SlowFast&#xff0c;那么下…

计算机毕业设计------基于SpringCloud的实验室管理系统

项目介绍 实验室管理系统的用户可以分为两种&#xff1a;系统管理员和普通用户。系统管理员主要功能&#xff1a; 登录登出、分析数据、管理用户、管理日志、管理实验室、管理预约、维护个人资料、实验室保修管理 用户主要功能&#xff1a; 注册登录、查询实验室、实验室预约…

基于ThinkPHP的云盘系统Cloudreve本地搭建并实现远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

element中Table表格控件实现单选功能、多选功能、两种分页方式

目录 1、Table表格控件实现单选功能2、Table控件和Pagination控件实现多选和两种分页方式方法一&#xff1a;使用slice方法方法二&#xff1a;多次调用接口 1、Table表格控件实现单选功能 <template><div><!-- highlight-current-row 是否要高亮当前行 -->…

WEB:探索开源PDF.js技术应用

1、简述 PDF.js 是一个由 Mozilla 开发的开源 JavaScript 库&#xff0c;用于在浏览器中渲染 PDF 文档。它的目标是提供一个纯粹的前端解决方案&#xff0c;摆脱了依赖插件或外部程序的束缚&#xff0c;使得在任何支持 JavaScript 的浏览器中都可以轻松地显示 PDF 文档。 2、…

【JUC】Synchronized及JVM底层原理

Synchronized使用方式 Synchronized有三种应用方式 作用于实例方法&#xff0c;当前示实例加锁进入同步代码前要获得当前实例的锁&#xff0c;即synchronized普通同步方法&#xff0c;调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置。 如果设置了&#xff0c;执行…

Linux 的引导与服务控制

一 开机启动过程 bios加电自检-->mbr-->grub-->加载内核文件-->启动进程 1 bios家电自检 检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 2 mbr 因为grup太大,第一个扇区存不下所有的grub程序&#xff0c;所以分为2部分指…

【每天五道题,轻松公务员】Day3:太阳常识

目录 专栏了解 ☞欢迎订阅☜ ★专栏亮点★ ◇专栏作者◇ 太阳常识 题目一 题目二 题目三 题目四 题目五 答案 补充扩展 专栏了解 ☞欢迎订阅☜ 欢迎订阅此专栏&#xff1a;考公务员&#xff0c;必订&#xff01;https://blog.csdn.net/m0_73787047/category_1254…

Android studio BottomNavigationView 应用设计

一、新建Bottom Navigation Activity项目&#xff1a; 二、修改bottom_nav_menu.xml: <itemandroid:id"id/navigation_beijing"android:icon"drawable/ic_beijing_24dp"android:title"string/title_beijing" /><itemandroid:id"i…