由于最近遇到一个开源软件作者跑路,软件作者是用Java来写的,而本身功能也比较多,由于本身是属于MC的模组,用其他语言也不方便啊,自己本身也有其他语言的编程知识,所以觉得花一丢丢时间速通下Java,应该也不是特别难的事情,这个是我自己的个人笔记,而我自己个人是稍微有一点点编程基础的,所以如果是0基础的,可能就不适合了,虽然我也会写一些基础内容,我不知道花多少时间会速通,但是平时也要工作干活嘛,所以哪天有进度哪天写记录,尽快掌握基础好好改以下这个开源项目的BUG,好让我继续把这个软件用下去,就这么一个简单目的,做项目那是不敢当的.
另外,不管何时,开始学习总比临渊羡鱼要好得多,开始吧.
Java一开始的设计目的是跨平台,所以他效率肯定和C这些没得比,他是基于JVM运行的,现在也有各种各样的方法来提高运行效率,什么JIT这些,这个等学差不多再去了解吧.而JVM运行的是字节码,可以理解成是Java虚拟机的汇编代码,JVM下面就是系统了,而JVM也不是Java专属,比如Scala也是运行在JVM上的,这么说JVM和Java也不是那么强绑定.
盗图一个国外的介绍.
反正JVM就是一个特殊的虚拟机,他屏蔽了底层的区别,所以class放在哪里都能运行,不像C你必须提供源码才可能跨平台,JVM存在,你只需要提供class就行.
一般来说最方便获得的Java开发环境可能是IDEA了,如果有其他...我主要也不知道.新建工程我就直接选现在最新的OpenJDK 22,虽然现在教程上很多都比较老了,但是光从学习基础肯定是没问题的.
创建后就给我整了个Hello World,右键就可以运行,能运行说明环境已经OK了.
public class Main {
public static void main(String[] args) {
System.<em>out</em>.printf("Hello world!");
}
}
查看结果
但是一般程序都会创建在包里,不会就这么裸在外面.
在src右键创建一个新的类,就叫com.base.hello吧.
自己重新写了一遍Hello World然后运行.
程序肯定就涉及变量,Java也和C语言差不多,有很多类型,但是和C不完全相通,分别有byte类型(等效C语言的char),short类型,int类型,long类型,float类型,double类型,表示16禁止和8进制方法和C语言一样,对于long末尾要添加L表示长整数,我这里做了一个简单的计算.
package com.hello;
public class basic {
public static long factorial(long n) {
if(n == 1)
return 1;
else
return n * factorial(n-1);
}
public static void main(String[] args) {
double x = 1.0;
long y = 0L;
for(int i = 5;i < 50;i++){
x = 3.14 * i;
y = factorial((long)i);
System.out.println(i + "*pi=" + x);
System.out.println(i + "!=" + y);
}
}
}
查看结果
我也不管为什么另一个函数前面要public什么各种,我先模仿写一个,果然也是一个普通可以调用的函数,看到上面有把i强制转化成long类型,其实这个可以默认转换,我这里做了一个显式转换,显然IDEA觉得我比较傻,至于运算符和C一样,也可以进行一元运算或者用基本的加减乘除,必要时候还可以调用Math库,类似C语言的math.h进行更复杂的数学计算,另外Java的随机数也在Math库里.
System.out.println(Math.sqrt(i)); // 和C语言sqrt一毛一样
System.out.println(Math.random()); // 返回的是double类型
也和C语言这些一样有各种逻辑运算符,移位运算等等,数组方面和C语言有一点点差别,甚至可以很方便表达字符串数组.
package com.hello;
public class basic {
public static void printArray(String[] arr) {
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void main(String[] args) {
String[] arr = {"one", "two", "three", "four", "five"};
String[] arr2 = new String[arr.length];
arr2[0] = "1";
arr2[1] = "2";
arr2[2] = "3";
arr2[3] = "4";
arr2[4] = "5";
printArray(arr);
printArray(arr2);
}
}
上面的代码运行结果是这样的.
one two three four five 1 2 3 4 5
但是IDEA告诉我,我还有更好的遍历方法,这个遍历方法是C语言中没有的.
修改后是这样的.
public static void printArray(String[] arr) {
for (String s : arr) {
System.out.print(s + " ");
}
}
Java还给数组增加了一些实用工具,这些以前在C语言中都要自己实现,比如常用的几个方法如下.
package com.hello;
import java.util.Arrays;
public class basic {
public static void printArray(String[] arr) {
for (String s : arr) {
System.out.print(s + " ");
}
}
public static void main(String[] args) {
String[] arr = {"one", "two", "three", "four", "five"};
String[] arr2 = new String[arr.length];
arr2[0] = "1";
arr2[1] = "2";
arr2[2] = "3";
arr2[3] = "4";
arr2[4] = "5";
Arrays.sort(arr); // 排序,按照字母开头逐个比较排序
printArray(arr);
System.out.println(Arrays.equals(arr, arr2)); // 比较
Arrays.fill(arr,"xxx"); // 填充
String[] arr3 = Arrays.copyOf(arr,2); // 复制出一个新数组
printArray(arr3);
}
}
运行结果
five four one three two false
xxx xxx
这么类比下来,Java应该是一个轮子很多很多,所以用起来就是拼凑轮子的玩意嘛.
for(auto c :str)
C++: 我也有