有C++基础,Java零基础。想学Java。目前我采用的方法是:

  • 先看一些Java入门视频(B站、腾讯课堂到处都有)快速了解Java这门语言,包括IDE怎么使用、基本输入输出、基本数据类型等,发现好些基础知识都差不多,毕竟都是面向对象的语言。
  • 然后力扣做题,先用C++写一遍,做题思路保持不变,将C++里用到的API替换成Java的(比如你这道题是用C++的unordered_map写的,你用Java写的时候换成对应的HashMap写一遍,遇到不知道的就去百度一下),用Java多刷几道题就大概能记住那些类的使用方法了,这时候基本上就会用Java写代码了。
  • 会用Java写代码算是刚刚入门了,如果想要代码写得好,必须要掌握语言的特性,包括Java各种类的底层原理什么的,这些可以买本书看。推荐书籍《Java核心技术》。
  • 要想深入学习Java,看书肯定不够啊,去GitHub上找点项目做,然后在工作中实践等等

由于博主初学Java,下面的内容如有错误的地方,还望各位Java大佬指出来。

1、IDE选择

  • 免费:Eclipse、IntelliJ Idea社区版
  • 收费:IntelliJ Idea旗舰版
  • 附上IntelliJ Idea官网下载链接

2、JVM、JRE与JDK

  • JVM(Java Virtual Machine),Java虚拟机,JVM 是 Java 能够跨平台的核心。
  • JRE(Java Runtime Envirnment),Java运行环境,JRE相对于 JVM,多了 Java 基础类库,你写好的Java程序需要有JRE才能运行。
  • JDK(Java Development Kit) ,Java 开发工具包,包含了Java运行环境(JRE)、Java工具和Java基础的类库。你写的Java程序如果要调试,需要有JDK,由于JDK包含了JRE,JRE包含了JVM,因此你的IDE只要装了JDK就不需要额外装JRE和JVM了。

3、Java和C++相同的一些基础知识

  • 基本数据类型:char、int、long、double……
    布尔类型不同(Java boolean,C++ bool)

  • 运算符:+、-、*、\、%、++、–、=、&&、||、!、<、>、==……

  • 判断语句:if、switch

  • 循环语句:普通for语句、while语句、do-while语句

  • continue、break、 关系表达式?表达式1:表达式2 用法相同。

  • 同样有封装、继承、多态等概念;有private、pubic、this、static 等关键字;有构造函数,用法类似。

  • 方法(函数)同样有定义、调用、重载等概念。

4、内存模型

java C++

5、数组

6、类的定义与使用

类的内存模型

仍以前面的代码为例,学生类Student实例化了一个对象stu1。

Java
        在main()方法中使用类Student,先实例化一个对象stu1,对象stu1占用堆内存,stu1的内存中又存放着类Student的各个方法的地址。

C++

若类有虚函数的情况,请看图解C++多态,虚函数、虚函数表、虚指针、重写与覆盖

接下来是常用API的对比

1、输入 ----------------------------------------------------------------

Java------Scanner

// 导包
import java.util.Scanner;// System.in 代表从键盘进行输入
Scanner sc = new Scanner(System.in);
// 获取键盘上输入的int型数据
int number = sc.nextInt();
// 输出看看
System.out.println(number);// 获取键盘上输入的字符串
String str=sc.next();
// 输出看看
System.out.println(str);

C++ ------cin

// 包含头文件
#include <iostream>// 输入int型数据
int number;
cin >> number;
// 输入string型数据
string str;
cin >> str;
// 输出看看
cout << number << endl << str << endl;

2、随机数 --------------------------------------------------------------

Java------Random

// 导包
import java.util.Random;// 使用
Random ran=new Random();
// 输出范围为INT_MIN~INT_MAX的10个随机数
for(int i=0;i<10;i++) {System.out.println(ran.nextInt());
}
// 输出范围为[0,n)的10个随机数
int n=5;
for (int i = 0; i < 10; i++) {System.out.println(ran.nextInt(n));
}

C++ ------rand

// 包含头文件
#include <stdlib.h>// 使用
// 设置种子,如果不设置,种子默认为1
srand(1);
// 输出100个伪随机数
for (int i = 0; i < 10; ++i) {cout << rand() << " ";
}

3、动态数组 ----------------------------------------------------------

Java------ArrayList

ArrayList<E>   list = new ArrayList(); 创建一个名为list的空数组链表,存放E类型的对象
ArrayList<E>   list = new ArrayList(n); 创建一个数组链表list,存放E类型的对象,初始容量大小为n
list.get(index); 访问下标为index的元素
Object[] c=list.toArray(); 获取一个数组c,c中所有元素是数组链表中的元素,即将数组链表转换为一个数组
list.set(index,element); 将下标为index的元素修改为element
list.add(element); 在list的尾部添加元素element
list.add(index,element); 在list的下标为index的位置添加元素element
list.remove(index); 删除下标为index的元素
list.clear(); 删除所有元素
list.size(); 返回值为数组链表的大小
list.isEmpty(); 数组链表为则返回true,否则返回false
list.contains(element); 数组链表中包含元素element则返回true,否则返回false
list.indexOf(element); 返回元素element在数组链表中第一次出现的位置,如果链表中没有这个元素则返回-1
list.lastIndexOf(element); 返回元素element在数组链表中最后一次出现的位置,如果链表中没有这个元素则返回-1

上表中<>尖括号内E代表泛型,泛型只能是引用类型比如String,不能是基本类型比如int,如果希望用ArrayList存储基本类型的数据,必须使用基本类型对应的引用类型,对应关系见下表。

基本类型 引用类型
byte Byte
boolean Boolea
char Character
short Short
int Integer
long Long
float Float
double Double

C++ ------vector

【C++】STL顺序容器之vector用法总结

4、字符串 ----------------------------------------------------------

Java------String

初始化
String s1 = new String(“hello world!”); 创建一个字符串对象,内容为"hello world!"
String s1 = “hello world!”; 创建一个字符串对象,内容为"hello world!"
String s1 = new String(); 创建一个空字符串对象
char c1[] = {‘h’,‘e’,‘l’,‘l’,‘o’}; String s1 = new String(c1); 创建一个字符串对象,内容为"hello"
byte b1[]={104,101}; String s1 = new String(b1); 创建一个字符串对象,内容为"he"
查找
s1.contains(String s2); s1中包含s2则返回true,否则返回false
s1.charAt(int index); 返回下标为index的字符
s1.indexOf(char element); 返回字符element在s1中第一次出现的位置,如果s1中没有则返回-1
s1.indexOf(char element,int index); 返回字符element 从s1的index位置开始,第一次出现的位置,如果没有则返回-1
s1.indexOf(String s2); 返回字符串s2在s1中第一次出现的位置,如果s1中没有s2则返回-1
s1.indexOf(String s2,int index); 返回字符串s2 从s1的index位置开始,第一次出现的位置,如果没有则返回-1
s1.lastIndexOf(char element); 返回字符element在s1中最后一次出现的位置,如果s1中没有则返回-1
s1.lastIndexOf(char element,int index); 返回字符element 从s1的index位置开始,最后一次出现的位置,如果没有则返回-1
s1.lastIndexOf(String s2); 返回字符串s2在s1中最后一次出现的位置,如果s1中没有则返回-1
s1.lastIndexOf(String s2,int index); 返回字符串s2 从s1的index位置开始,最后一次出现的位置,如果没有则返回-1
比较
s1.equals(s2); s1与s2相等则返回true,否则返回false
s1.equalsIgnoreCase(s2); 忽略大小写的情况下,s1与s2相等则返回true,否则返回false
s1.compareTo(s2); 比较s1与s2的大小,s1>s2返回正数,s1=s2返回0,否则返回负数
s1.compareToIgnoreCase(s2); 忽略大小写的情况下,比较s1与s2的大小,s1>s2返回正数,s1=s2返回0,否则返回负数
替换
String result=s1.replace(oldChar,newChar); 将s1中的字符oldChar替换为字符newChar,结果保存在result中
String result=s1.replace(target,replacement); 将s1中的字符串target替换为字符串replacement,结果保存在result中
String result=s1.replaceAll(target,replacement); 将s1中的target全部替换为replacement,结果保存在result中,target和replacement都是正则表达式
String result=s1.replaceFirst(target,replacement); 将s1中的第一个target替换为replacement,结果保存在result中,target和replacement都是正则表达式
其他
s1.length(); 返回值为字符串的长度
s1.isEmpty(); 字符串为则返回true,否则返回false
String result=s1.substring(index); 得到s1从下标index开始的子串,结果保存在result中
String result=s1.substring(index1,inex2); 得到s1从下标index1开始到下标index2结束的子串(左闭右开),结果保存在result中
String result=s1.toLowerCase(); 将s1中的大写字符变换成对应的小写字母,结果保存在result中
String result=s1.toUpperCase(); 将s1中的小写字符变换成对应的大写字母,结果保存在result中
String result=s1.concat(s2); 将s1和s2拼接后的结果保存在result中,注意,s1、s2的值不会改变
String result[]=s1.split(regex); 根据正则表达式regex将s1拆分开,结果保存在result[]字符串数组中

C++ ------string

【C++】STL顺序容器之string用法总结

5、操作数组的工具类 ----------------------------------------------

Java------Arrays

int[] a=new int[]{8,1,2,3,7,5,4,6,7,0}; 以数组名为a进行举例
System.out.println(Arrays.toString(a)); 打印数组
Arrays.sort(a); 对整个数组排序
Arrays.sort(a,index1,index2); 对下标i范围为ndex1~index2(左闭右开)的元素进行排序
int result=Arrays.binarySearch(a,target); 二分查找元素target,若找到则返回target的索引,否则返回负数
Arrays.fill(a,value); 将数组元素全部填充为value
Arrays.fill(a,index1,index2,value); 将下标从index1开始到index2的元素(左闭右开),填充为value
int[] b=Arrays.copyOf(a,length); 将数组a的前length个元素拷贝给数组b
int[] c=Arrays.copyOfRange(a,index1,index2); 将数组a的下标从index1开始到index2的元素拷贝给数组b

程序示例

int[] a=new int[]{8,1,2,3,7,5,4,6,7,0};
// 打印
System.out.println(Arrays.toString(a));  // toString(a)打印数组
// 排序
Arrays.sort(a,0,5);                      // 只对下标0~5(左闭右开)的元素进行排序
Arrays.sort(a);                          // 对整个数组排序
// 二分查找
int r1=Arrays.binarySearch(a,7);        // 得到查找的结果的索引,未找到则返回负数
System.out.println(r1);
// 填充
Arrays.fill(a,1);                        // 将数组元素全部替换成1
Arrays.fill(a,0,5,0);                    // 将下标从0开始到5的元素(左闭右开),填充为0
System.out.println(Arrays.toString(a));  // toString(a)打印数组
// 复制数组
int[] b=Arrays.copyOf(a,5);             // 复制数组的前5个元素
int[] c=Arrays.copyOfRange(a,3,7);      // 复制下标从3到7的元素

6、Math类 ----------------------------------------------

程序示例

double a = 1.2038456;
double b = 1.2038456;
double result1 = Math.floor(a);     // 向下取整
double result2 = Math.ceil(a);      // 向上取整
double result3 = Math.round(a);     // 四舍五入
double result4 = Math.max(a,b);     // 最大值
double result5 = Math.min(a,b);     // 最小值
double result6 = Math.abs(a);       // 绝对值
double result7 = Math.pow(a,b);     // 幂函数
double result8 = Math.sqrt(a);      // 平方根

C++转Java快速入门相关推荐

  1. Java快速入门-01-基础篇

    Java快速入门-01-基础篇 如果基础不好或者想学的很细,请参看:菜鸟教程-JAVA 本笔记适合快速学习,文章后面也会包含一些常见面试问题,记住快捷键操作,一些内容我就不转载了,直接附上链接,嘻嘻 ...

  2. apache thrift_使用Java快速入门的Apache Thrift

    apache thrift Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift允许您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文 ...

  3. 使用Java快速入门的Apache Thrift

    Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文件用作编译器的输入,以生成用 ...

  4. ACM中java快速入门

    2019独角兽企业重金招聘Python工程师标准>>> ACM中java快速入门 附: Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特 ...

  5. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  6. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  7. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记6 | Java语言中的for循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记5 | Java语言中的while循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  10. Java快速入门学习笔记4 | Java语言中的if条件语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. .net 连接ORACLE 数据库的例子
  2. 《细胞》:打破百年生物学法则,记忆可以遗传给下一代,甚至可能跨越多代...
  3. 一切技术创新史都是数据史
  4. python 字符串 数字_Python基础教程:数字、字符串
  5. spring BeanFactory概述
  6. 贪小便宜的人交不得,否则,可能会因小失大
  7. 远程对象工厂设计模式
  8. scala 编程 ——类型限定与泛型编程
  9. Android Theme主题继承(SDK下主题和v7包下主题)
  10. f分布表完整图a=0.01_Matlab中的数据分析之概率分布与检验实例讲解
  11. ArcMap10 批量等距离分割线段
  12. LOJ-10102(求A到B之间的割点)
  13. photoshop 用户名、组织或序列号丢失或无效的解决方法(转http://apps.hi.baidu.com/share/detail/10025023)
  14. Tornado @tornado.gen.coroutine 与 yield
  15. 2022天梯赛 L1-087 机工士姆斯塔迪奥
  16. [UE4]使用UMG的用户界面,设置UMG的模块依赖性(C++)
  17. pandas学习笔记-DataFrame(2)
  18. 微信支付分(三)--完结支付分订单
  19. (修订)MySQL优化/面试,看这一篇就够了
  20. 实现 外网 远程桌面 连接 个人pc(开机自启动,校园网web自动验证,多用户远程桌面)

热门文章

  1. python从字符串中删除字符_在Python中从字符串中删除字符
  2. OpenCV通过cvFindContours与cvDrawCountours函数查找轮廓
  3. CSS 画一条横线/竖线
  4. DPDK- flow Metering
  5. libusb-win32
  6. C++/Qt中文显示乱码与string/wstring/wchar_t转换
  7. apache加nginx加Php,Apache/Nginx为PHP设置、添加$_SERVER服务器环境变量
  8. 搜题公众号对接题库教程
  9. SAP 下载CSV文件到本机(SAP_CONVERT_TO_TEX_FORMAT)(示例代码) <转载>
  10. 163editor 网页编辑器 获值