Java基础-与Js的一些差异总结

2018-11-03  本文已影响16人  指尖轻敲

作为一只写js的猿,上手java肯定会觉得它真的好繁琐。所以,一步一步来吧,菜鸟上路,从基础开始,各路大神多多指教。

数据类型


''和""的区别

在js中''""是没有什么区别的,基本上可以使用单引号的地方就可以用双引号代替,在没有模板字符串时进行字符串的拼接可能会把两者结合使用。
但是在Java中,''里的内容是单个字符,属于char类型;而""则代表字符串,属于String类型。

double和float

double不是double kill的意思,float也不是浮动的意思。他们代表的是浮点型的小数。double是17位有效数字的双精度类型,比float的8位单精度类型更精准。
默认情况下小数是double类型的,如果要用float需要在最后加上f。而double类型的d是可以省略的。

double price=120.5;
float height = 175.8f;

自动类型转换和强制类型转换

如果是从int转到double,或者从float转到double都是可以自动进行转换的。反之则则不行,也就是说从类型范围小的可以自动转换成类型范围大的。

int age = 18;
double age2 = age;
System.out.println(ages); //18.0

但是如果想反过来转换呢?这里就需要使用强制类型转换。使用强制类型转换可能会造成数据的丢失,需谨慎使用。(如下,小数点的5被直接截断)

double height = 178.5;
int height2 = (int)height;
System.out.println(height2); //178 

==和===和equals()

在js中==只判断值是否相等,如果要判断类型也相等就需要使用===。但是注意:在java中没有===只有==,==就已经判断了类型是否相等。
而equals()方法是判断引用数据类型的,它判断的是引用的内存地址是否相等(即是否是同一个对象),而不是判断值。

但是在学习过程中碰到了以下情况:

String string1 = new String("字符串");
String string2 = new String("字符串");
System.out.println(string1.equals(string2)); //true

不是说equals比较的是对象的内存地址吗?为什么两个不同的对象会相等呢?一开始我以为自己理解错了,后来发现原来String类重写了equals方法,判断存储的内容是否相等,所以返回true。

String string = "字符串";
String string2 = "字符串";

如果是String string = "字符串"这样声明的两个相同的字符,其实是同一个,因为同一字符串出现多次java编译程序实际只创建了一个,所以string和string2指向的内存地址也一样。

数组


数组的声明

int[] scores = { 89, 72, 64, 58, 93 };
System.out.println(scores); //[89, 72, 64, 58, 93]
String[][] names={{"tom","jack","mike"},{"zhangsan","lisi","wangwu"}};

数组的遍历

除了普通的for循环外,还可以用foreach来遍历数组。

for ( int score : scores) {
  System.out.println(score);
}

如果只是取数组的每一个元素的话,这个方法比普通for循环方便很多,但是如果要是用的索引的话,该怎么办呢?可以通过定义一个自增变量来实现。

int index = 0;
for ( int score : scores) {
  System.out.println(index);
  index++;
}

数组常用方法

在js中,数组常用的方法直接.方法名就可以了,但是Java中使用方法是需要提前导包的。

import java.util.Arrays;
public class HelloWorld {
    public static void main(String[] args) {
        int[] scores = { 89, 72, 64, 58, 93 };
        // 对Arrays类对数组进行排序
        Arrays.sort(scores);
        // 使用foreach遍历输出数组中的元素
        for ( int score : scores ) {
            System.out.println(score);
        }
    }
}
/*
58
64
72
89
93

方法


方法的声明

在js中定义一个方法之间function 方法名,完事。甚至在es6出来之后都可以使用箭头函数,function都不要写了。但是在Java中定义一个方法就没有这么干脆了。

访问修饰符 返回值类型 方法名(参数) {}

public void print() {
  System.out.println("Hello World");
}

Java中定义方法应该遵循以上结构,具体每部分的含义往下看:

1、访问修饰符:该方法允许被访问的范围。public(任何位置)protected(本类、子类、同包下可以访问)不写(默认在本类、同包下可以访问)private(只能在本类中访问)

2、 返回值类型:如果没有返回值,则类型指定为void,如果有返回值就指定为返回值的类型。

3、方法名:合法的标识符。没有其他特殊之处

4、参数:如果是多个参数则以逗号隔开。

方法的调用

在js中一个类中要调用方法,直接this.方法名就可以了,这里需要先创建实例对象。

public class HelloWorld { 
    public static void main(String[] args) {
        // 创建对象,对象名为hello
        HelloWorld h = new HelloWorld();
        // 调用方法
        h.showMyLove();
    }

    /*
     * 定义无参无返回值的方法
     */
    public void showMyLove() {
        System.out.println("世界和平!");
    }
}

Java中main方法最先执行。

方法的重载

每一个知识点都要和js对比着来学习,这样可以记得更牢靠,而且对js的基础也能更扎实。
在js中是没有方法重载的概念的,如果出现方法相同的情况,后声明的方法会直接把原有的方法覆盖掉。但是在Java中会根据以下情况判断方法重载:

满足这条件说明方法被重载了,调用时会通过参数的不同匹配调用不同的方法。而不会出现覆盖现象!

上一篇 下一篇

猜你喜欢

热点阅读