我不想学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)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。
在子类构造方法中,并没有写任何关于基类构造的代码,但是在构造子类对象时,先执行基类的构造方法,然后执行子类的构造方法,因为:子类对象中成员是有两部分组成的,基类继承下来的以及子类新增加的部分。父子肯定是先有父再有子,所以在构造子类对象时候,先要调用基类的构造方法,将从基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整 。 注意:
- 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构 造方法
- 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的 父类构造方法调用,否则编译失败。
- 在子类构造方法中,super(…)调用父类构造时,必须是子类构造函数中第一条语句。
- 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()方法获取系统今天的日期,显示格式为:2023-10-28 <template><view class"content">{{date}}</view> </template> <script>export default {data() {return {date: new Date().toISOString().sl…...
编码和解码的未来之路
hello,我是小索奇。在计算机科学的世界中,编码和解码是无处不在的神奇力量,而现代技术的巅峰之一就是 ChatGPT。让我们一起探讨编码和解码如何与 ChatGPT 这一人工智能的杰作相互结合,打开了无限可能的数字世界之门。 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
步骤: 准备容器引包(开发版本/生产版本)创建实例new Vue()添加配置项 el指定挂载点data提供数据 准备容器 就是新建一个div标签 引包 vue2版本中文文档:https://v2.cn.vuejs.org/v2/guide/ 尝试 Vue.js 最简单的方法是使用 …...
【单片机项目实战】温度控制系统
本项目的主要作用是实现温度调控,通过设定一个预定的温度值,实现实时检测外界温度,当外界温度小于预定值时,电机正转,实现降温效果;当外界温度大于预定值时,电机反转,实现升温效果&a…...
SpringMVC-视图
SpringMVC中的视图实现了View接口,作用是渲染数据,将Model中的数据展示给用户。render是渲染方法,可以看到渲染的视图是一个View类型的对象。 SpringMVC视图的种类有很多,默认有转发视图和重定向视图。 如果配置了Thymeleaf视图解…...
【React系列】Hook(一)基本使用
本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识hook 1.1. 为什么需要hook Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下…...
算法训练营Day28
#Java #贪心 开源学习资料 Feeling and experiences: 这周来到了贪心算法,简要概述: 贪心算法是一种在每个步骤中都采取最优解(即,在当前看来最好的解)的算法设计策略。它通常用于求解优化问题。这种方…...
鸿蒙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的意义是什么? 与聚集索引不同,二级索引通常是非唯一的,并且以相对随机的顺序插入二级索引。同样,删除和更新可能会影响索引树中不相邻的二级索引页,如果每一次都操作磁盘&am…...
C++完成Query执行sql语句的接口封装和测试
1、在LXMysql.h 创建Query执行函数 //封装 执行sql语句 if sqllen 0 strlen获取字符长度bool Query(const char*sql,unsigned long sqllen0); 2、在LXMysql.cpp编写函数 bool LXMysql::Query(const char* sql, unsigned long sqllen){if (!mysql)//如果mysql没有初始化好{c…...
C:宏:编程风格:井号与define之间的空格
在这一篇中有提到,井号与define之间空格,可能导致搜索上的一些问题。 https://mzhan017.blog.csdn.net/article/details/135289451 今天看到有专门做这个空格的修改: https://sourceware.org/git/?pglibc.git;acommitdiff;hfcf70d4114db9ff…...
django websocket
目录 核心代码 consumers.py from channels.generic.websocket import WebsocketConsumer from channels.exceptions import StopConsumer import datetime import time from asgiref.sync import async_to_sync class ChatConsumer(WebsocketConsumer):def websocket_conne…...
HackTheBox - Medium - Linux - Bagel
Bagel 今天我开始了《Red Team Development and Operations A Practical Guide》的学习,保持学习,后面差不多到时机后就学CRTOⅡ Bagel 是一款中等难度的 Linux 机器,其特点是电子商店容易受到路径遍历攻击,通过该攻击可以获取应…...
Capsolver:解决Web爬虫中CAPTCHA挑战的最优解决方案
Web爬虫已经成为从各种在线来源提取和分析数据的不可或缺的技术。然而,在Web爬取过程中,经常会遇到的一个共同挑战是CAPTCHA。CAPTCHA(完全自动化的公共图灵测试,用于区分计算机和人类)是一种安全措施,旨在…...
大数据系列之:读取parquet文件统计数据量
大数据系列之:读取parquet文件统计数据量 一、Spark读取parquet文件统计数据量二、parquet-tools统计parquet文件数据量三、实际应用案例 一、Spark读取parquet文件统计数据量 首先,创建一个 SparkSession 对象: val spark SparkSession.b…...
力扣题:字符串变换-1.5
力扣题-1.5 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:482. 密钥格式化 解题思想:首先先将破折号去除,并将所有字母转换为大写,然后计算第一组的长度,进行结果字符串的拼接,如果第一组的长度为0,则需要删除开头的’-符号 class S…...
el-autocomplete远程搜索使用及el-upload上传多个文件流给后端,详情接口返回的是文件地址,前端将文件地址转成文件流,回传文件流给后端
最近遇到一个项目,里面有2个需求我觉得挺常见的,第一个需求是一个表单里,当用户在输入名称后,前端调接口发请求获取到关联名称的企业名称,并展示,然后当用户选中企业后,前端调接口获取选中企业的具体信息,并填充到表单里;第二个需求是,表单里有个上传图片的功能,前端…...
2024年度 ROTS - 实时操作系统 Top 15
RTOS(实时操作系统)。 这里说的 RTOS 并非新星球大战电影中的机器人,而是物联网设备、航空系统、空中交通管制等背后的无声协调者,就在地球上。 RTOS,或称实时操作系统,设计它们是为了更好的管理资源&…...
苹果怎么同步备忘录?教程来了,干货满满!
在苹果设备中,备忘录是一款非常实用的应用程序,可用于记录日常生活中的各种事项。然而,还有一些小伙伴不知道苹果怎么同步备忘录,这可能会成为他们的一个困扰。别着急!本文将详细介绍同步苹果手机备忘录的方法…...
如何维护网站的运营/大数据营销的案例
选择科目测一测我能上哪些大学选择科目领取你的专属报告>选择省份关闭请选择科目确定v>陕西师范大学的简称是“陕师大”,这是一所位于陕西西安的公办师范大学,目前由我国教育部直接管理。那么,陕师大是好学校吗?陕师大出来好…...
比较大的做网站的公司/郑州seo优化顾问热狗
玩转大数据可视化,推荐几个必学的工具! 数据分析不是个事儿 百家号18-02-0915:14 如今,企业越来越重视数据分析给业务决策带来的有效应用,而可视化是数据分析结果呈现的重要步骤。而可视化技术/工具在国内国外也发展的相当成熟&…...
张北网站建设公司/国内seo公司哪家最好
为什么80%的码农都做不了架构师?>>> jQuery插件PrintArea可实现打印页面某区域功能。 使用说明 需要使用jQuery库文件和PrintArea库文件 使用方法 一,包含文件部分 <script type"text/javascript" src"jquery.js&quo…...
哪一个网站做专栏作家好点/郑州网络推广方法
XXXXXX学院51单片机系统设计 课程设计报告题 目: 秒表系统设计专业、班级:学生姓名:学 号:指导教师:分 数 :[摘要]本设计是一个秒表计时器,采用51单片机实现。电路包括以下几部分:单片机最小系统…...
建设网站需要哪些人/网页设计代码
学习了一下费用流的做法,顺便学习了一下zkw(听说原始对偶是折中做法,这种没什么特点的就不学了),顺便研究了一下费用流的速度:(对于这题而言)upd抱歉我这个SLF优化写反了。。。然而反…...
怎么在百度做网站/怎么查找关键词排名
Guava — Preconditions 简单的说Preconditions类提供了一堆静态方法,用来检验参数,引用是否为空,数组下表是否越界,然后抛出相应异常,简化代码。 还可格式化输入方式(%s)封装异常信息,看看源代码应该就很…...