0
点赞
收藏
分享

微信扫一扫

在学习java的路上碰到的那些事。

guanguans 2022-04-05 阅读 15
java

新人。主业修图。写这个只是为了记录一下,不对的地方还请指正。希望能坚持下去。

某乎同步更新。。


目录

2022.3.1

对于方法的理解

方法的正确引用:

不同方法实现同一目的该如何使用:

2022.3.17

今天在学习多线程的时候,老师讲了用join方法在主线程里面去联合一个子线程。主线程会在子线程运行完成之后,再去继续执行,这时候我想,那么如何用一个子线程去联合其他的子线程呢?

2022.3.19

线程死锁的有趣现象

2022.4.5

mysql中的一些低级错误


2022.3.1

对于方法的理解

方法的构成:1.构造器. 2.返回值类型、3.形参列表

方法的调用方法:对象名.方法名(实参列表)

方法的作用:方法的调用就如同对规则的引用,假设一个公司没有规则,那么一个员工犯了错,大家都觉得要惩罚他,但是却无从下手。

那么如果有对应的方法来处理的不同的犯错类型的话,就会更高效的管理公司。

其实就类似PS里面的动作,Wegame里面的符文推荐。方便下次要用的时­候直接调用。而无需复杂、重复的操作。

Java是一门语言,计算机语言,其实知道是一种语言,那么我觉得在学习的时候就可以把它当成一种外语来学习。语言里面最重要的语法,其实就对应Java当中的方法。

我们在学Java的时候不仅要记住一些常用方法的使用规则,也要去理解它们的实现规则,也就是底层源码。

这就好比我们在学习语文的时候,我们不仅要知道一句诗词应该怎么用,也需要知道它背后的含义是什么。知道含义了我们用起来就会更加得心应手。方法好比是一篇古诗,而底层源码就像是诗背后的时代背景,或者是诗人的性格特点。我们知道了这些就知道了作者为何要写这篇诗,那我们在遇到跟作者相同心境的时候也能在脑海中立马浮现对应的诗词。(当然我们也可以通过死记硬背的方式,来达到另一种灵活运用的效果)。

方法的正确引用:

当我们通过敲代码已经知道了一些方法操作流程之后,在案例应用中,就要去做到灵活运用。举个例子,我们学了一大堆的古诗,基本名篇都可以张口就来,但是如何正确引用这些古诗呢,登上山顶的时候我们可以说“会当凌绝顶,一览众山小”,而不是“水光潋滟晴方好。。。” 

那么如何在java中做到方法的正确引用呢,我目前觉得应该第一是理解这个方法的作用,第二就是去多写案例,通过模仿别人的代码,对一些数据进行修改,加入自己的理解,再多多查看源码,以及api帮助文档,才能在慢慢的积累中做到得心应手。

不同方法实现同一目的该如何使用:

今天在学习Lambda表达式时,学到了可以通过predicate这个函数接口下的removeIF方法来对容器中的元素进行删除,但是之前在学容器的时候,容器本身也有remove方法来对容器中的元素进行删除。这两个方法都实现了删除元素这一功能。那么这种不同方法实现同一目的该如何选择呢,我认为我形成这种纠结是因为我敲的太少,对这两个方法的认知还是不够,这也是方法的正确引用中所说的没有做到位。

举个例子,就像我们剪切文件一样,有三种方法,第一是右击-剪切-粘贴。 第二是ctrl x - ctrl v 。第三是ctrl c - ctrl v- delete源文件。这三种方法都实现了文件的剪切功能,但是哪个最有效,或者哪个对于自己来说最方便,最容易使用就用哪个。我现在对java中的方法还没有这么一个“哪个好用”的概念,证明我的敲代码能力还不够。


2022.3.17

今天在学习多线程的时候,老师讲了用join方法在主线程里面去联合一个子线程。主线程会在子线程运行完成之后,再去继续执行,这时候我想,那么如何用一个子线程去联合其他的子线程呢?

我想来想去,想了很久,都搞不清楚。

后来,在老师讲的另外一个案例的时候,他就在子线程里面联合了另一个子线程,他是怎么做的呢。。就是在子线程的run方法里面去实例化另外一个子线程就好了,然后再调用那个子线程的Strat方法和join方法,就解决了这个问题。。。。我恍然大悟啊!卧槽!对啊,main方法其实也是一个线程啊,它能联合子线程,那其他的子线程也能相互联合的呀,只要在方法里面写出来就好了。。。

我之所以想不到,是因为我只把main方法当成了一个程序的入口,忽略了它其实也是一个线程。我只看到了main方法里面可以实例化一些对象,忘了在其他的方法里面,也可以去实例化别的类的对象。

为了验证我上面说的,写了个测试了,测试通过,所以我确实太死脑筋了。或者是基础不牢固=-=

2022.3.19

线程死锁的有趣现象

package XianCheng;
class lipstick{

}
class mirror{

}
class makeup extends Thread{
    private String name;
    private int flag;
   lipstick l= new lipstick();
    mirror m = new mirror();
    public makeup(String name, int flag) {
        this.name = name;
        this.flag = flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }
    public void domakeup(String name,int flag){
        this.name = name;
        this.flag = flag;

        if (flag == 0){
            synchronized ("lipstick.class"){
                System.out.println(this.name +" 拿着口红");
                synchronized ("mirror.class"){
                    System.out.println(this.name +" 拿着镜子");
                }
            }
        }else{
            synchronized ("mirror.class"){
                System.out.println(this.name +" 拿着镜子");
                synchronized ("lipstick.class"){
                    System.out.println(this.name +" 拿着口红");
                }

            }
        }
    }
    @Override
    public void run() {
        this.domakeup(name,flag);
    }
}

public class DeadSync {
    public static void main(String[] args) {
        makeup m1 = new makeup("吴彦祖",0);
        makeup m2 = new makeup("彭于晏",1);
        m1.start();
        m2.start();
    }
}

我把class 锁改成了字符串锁之后,运行了很多次,有时候是成功解锁的,这就涉及到cpu在调用线程的时候先后问题,如果是交替运行,那么肯定是死锁了,如果是串行运行,那么就解锁。。那么问题来了,cpu在调用线程时多久会轮换一次线程?


2022.4.5

mysql中的一些低级错误

最近在学习mysql的时候,理解起来还很容易的,就是在实际操作的时候,遇到了很多的问题,歪日,最大的问题就是单词的拼写错误。真的很想打死自己。。。

就比如这个wehn。。。。 

第二点就是 总是忘记加‘’ 这个真的很关键啊,在用like子句或者 插入子句的时候,总是因为忽略‘’而报错,简直就是简直了,敲语句一分钟,找错五分钟都不止。


举报

相关推荐

0 条评论