java小技术点分享_java知识分享篇(六)

大家好,我是小小刀,很高兴又和大家见面了,来吧,知识点分享走起!

开场白

新的一周开始啦,一周的时间,看着小伙伴在群里面的进步,很开心,对我来说,也复习了很多知识点,这是一个共同学习,进步的过程。加油,小伙伴们!!

周末分享

提问值传参和引用传参(宋小刀)

源分享

public class MyClass {

public static void main(String[ ] args) {

int x = 5;

addOneTo(x);

//输出的还是5

System.out.println(x);

}

static void addOneTo(int num) {

num = num + 1;

}

}

回答(java小白)

java中方法参数传递方式是按值传递。

如果参数是基本类型,传递的是基本类型的字面量值的拷贝。

如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝

宋小刀同学查资料学习后的分享

原始类型的参数,传的这个参数的副本(相当于copy了一个出来)。。。函数中改变了副本(copy的那个)不会改变这个参数(原来的那个)

引用类型的参数,传的就是这个参数的副本(参数的地址),如果没有改变了这个参数的地址,那么改变了的副本会传入到该参数里面。。。

String对象一旦创建不可修改(lmbby)

源分享

String str = "abc";

System.out.println(str); // abc

str=str+"de";

System.out.println(str); // abcde

这段代码实际执行是:JVM先创建一个String对象str 赋值“abc”,第三行JVM再创建一个新对象也命名str,将原来的str值和"de"拼接赋值给新的str;

而第一行的str就被JVM的垃圾回收机制回收掉了。

JAVA对String对象的操作实际上是一个不断创建新对象并将旧的对象回收的过程

扩展

学习代码有三步曲,1,顺手点开源码看看,2,看看编译后的.class文件,3, javap -v  *.class 看看 ,对于这个知识点,小伙伴们可以尝试下

声明常量时使用final(追风人)

源分享

声明常量时可以在变量前加上final,常量名都大写;常量名有多个单词组成时用下划线将各单词分开。

扩展

final 不仅仅是可以修饰变量,还可以修饰类,方法,小伙伴们可以看下final修饰不同地方时的特性

三大特性之继承的理解(柚是你)

源分享

1.子类是否可以继承父类对于接口的实现?

可以。准确的说子类从父类中继承来的都是父类的方法,没有接口的区别了。

2. 子类在什么情况下必须实现父类中的方法?

父类是抽象类,子类不再派生下一级的子类了。

扩展

这个知识点可以和上篇分享的加了static 的继承,加泛型的继承一共来看,把继承的这个知识点给消灭掉

看,慢慢的,我们分享的知识点就串联起来了,形成了一个体系,一个整体!

Integer用 == 比较的特殊性(smile@)

源分享

Integer i1 = 100;

Integer i2 = 100;

System.out.println(i1==i2);

Integer i3 = 1000;

Integer i4 = 1000;

System.out.println(i3==i4);

为啥100是true,1000就是false

回答(java小白)

在给Integer 赋值时,实际上是自动装箱的过程,也就是调用了Integer.valueOf(int)方法,当这个值大于等于-128,并且小于等于127时使用了常量池,所以前两个地址是相等的,但是后两个超过了127,故不使用常量池

扩展

学习代码有三步曲,1,顺手点开源码看看,2,看看编译后的.class文件,3, javap -v  *.class 看看 ,对于这个知识点,小伙伴们可以尝试下(好把,我又把这段话复制了一遍,说明非常非常的重要),对于这个知识点,可以点开看看源码,是怎么缓存的

++i,i++的区别(java小白)

源分享

public class Test{

public static void main(String[] args){

firstMethod(0);

twoMethod(0);

}

public static void firstMethod(int a){

for(int i=0; i<=100; i++){

a = a++;

}

System.out.println("first"+a);

}

public static void twoMethod(int a){

for(int i=0;i<=100;i++){

a = ++a;

}

System.out.println("two"+a);

}

}

扩展

如果是我,我会问 ++ 是对栈上操作还是对局部变量表操作,学习代码有三步曲,1,顺手点开源码看看,2,看看编译后的.class文件,3, javap -v  *.class 看看 ,对于这个知识点,小伙伴们可以尝试下(好把,我又把这段话再复制了一遍,说明非常非常的重要!!!!)

最后说两句

坚持的人一如既往,装睡的人一睡不醒,但时间都在一步一步的往前走着,不会为谁停留,这些时间,我时不时的就会焦虑,时间真的是走的太快了,时代也发展的太快了,连尾巴都没抓住就迎来了新的浪潮,在此期间,唯有沉下心来坚持,学习。有人问我是不是已有了目标,其实并没有,甚至怎么做我也不知道,只知道现在这样坚持学习下去是没错的,少年郎加油吧!

想进群一起互相监督学习的小伙伴可以加小刀微信进群:

best396975802


版权声明:本文为weixin_32365777原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。