Java速通 Day1 – 基础知识

/ 1评 / 0

由于最近遇到一个开源软件作者跑路,软件作者是用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应该是一个轮子很多很多,所以用起来就是拼凑轮子的玩意嘛.

  1. wenjun hong说道:

    for(auto c :str)
    C++: 我也有

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注