作为一只写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中会根据以下情况判断方法重载:
-
必须在同一个类中
-
方法名相同
-
参数的个数,位置,类型不同
-
与修饰符或者返回值没有关系。
满足这条件说明方法被重载了,调用时会通过参数的不同匹配调用不同的方法。而不会出现覆盖现象!
网友评论