在学习java的路上碰到的那些事。<input type=“button“ value=“是“ onmouseover=“click()“/>

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

某乎同步更新。。


目录

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子句或者 插入子句的时候,总是因为忽略‘’而报错,简直就是简直了,敲语句一分钟,找错五分钟都不止。


终于明白为什么不推荐装新版的mysql了!!

今天跟着老师敲了这么一段

grant select on test.emp3 to 'u_wuyanzu' @'localhost' identified by '123';

按道理来说这是非常基本的一个给定用户权限的句子。但是却反复报错,报错报道我崩溃人生,我甚至用跟老师敲的逐字对比,发现全部都是对的,但是他的却运行了,我的还是报错。

然后我去问往上提问,得到的回答是,改成这样:

grant select on test.emp3 to 'u_wuyanzu' @'localhost' ;

终于不是语法报错了,而是


You are not allowed to create a user with GRANT


​​​​​​​?这是什么意思。我又去往上查,终于搞明白了,tmd 因为我用的是最新版的mysql 而最新版的mysql是不支持在给定用户权限的同时创建用户的!!必须要先创建用户然后再给权限!!

然后我就创建了用户


create user u_wuyanzu identified by '123';



再执行 

grant select on test.emp3 to 'u_wuyanzu' @'localhost' ; 

You are not allowed to create a user with GRANT

?还是报错,为什么我不理解。

最后的最后花了一个小时,我明白了

第一:root 用户是 的host是 localhost 要改成 %;

第二:在创建用户时,要先给定host,不然的话,它默认的host权限就是%,所以当我用

grant select on test.emp3 to 'u_wuyanzu' @'localhost' ;

时,localhost 和%不匹配 同样被视为我在创建新用户。。。。

so ,我觉得 mysql在创建用户时,只要 user 和host两者有一个不同会被视为不同的用户,为了验证这个猜想,我又添加了一个用户

mysql> create user liudehua @'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant select  on test.emp3 to 'liudehua';
ERROR 1410 (42000): You are not allowed to create a user with GRANT
mysql> grant select  on test.emp3 to 'liudehua'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> create user liudehua @'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| liudehua         | %         |
| root             | %         |
| u_wuyanzu        | %         |
| liudehua         | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+

两个 liudehua 不同的 host 事实证明是对的=-=

浪费了一个多小时

现在我终于明白了,为什么不推荐大家安装新版的软件,是有原因的。。。

2022.4.19

js中那些不能用来用作函数名的单词

click。

好气啊,又被这个打扰了一两个小时,因为命名错误

<input type="button" value="是" onmouseover="click()"/>

 function click(){
                alert("123");
            }

 这样是运行不了的,随便改个名字就好了 tomato的;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值