<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HHBBL的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/HHBBL</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HHBBL]]></copyright><item><title><![CDATA[多线程不同步现象及解决]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/131275429</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/131275429</guid><author>HHBBL</author><pubDate>Sun, 18 Jun 2023 21:24:52 +0800</pubDate><description><![CDATA[synchronized就像一把锁，JAVA使用锁机制保证同步代码块或方法的“原子性”，即保持整体性，不可分割。但内存对于线程的执行却并非是执行完一个线程的全部代码，他可能没被执行完就让别的线程从内存中挤出去了。窗口1，窗口2两个线程，重写了run方法，再调用start()，开辟了两块独立的栈内存。首先每一个时间点只能执行两个窗口中的其中一个，他们是并发的，不能在内存中同时进行。接下来新建windows类，作为售票的窗口，也是我们程序的主类。就这样，我们简单还原了生活中卖票的情形，但运行结果却不尽人意。]]></description><category></category></item><item><title><![CDATA[Reader类中read方法]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/131158547</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/131158547</guid><author>HHBBL</author><pubDate>Sun, 11 Jun 2023 22:20:46 +0800</pubDate><description><![CDATA[off代表会从char数组的几号位置开始存，并且存的时候文件中的字符不够，缺多少个，就会从字母d（也就是存入char数组的字母）在文件中的前多少位开始存。返回值就代表char数组这次存入了多少个文件中的字母（往前面取的并不算）。在java的学习中，我们用read方法通常用的。可以知道len代表会将几个字符写入char数组。具体是什么意思，我想用以下代码来试验。当没有字母可存，返回-1。然后依次再修改len为3。sb.txt中写的是。]]></description><category></category></item><item><title><![CDATA[Reader类read方法的学习]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/131056879</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/131056879</guid><author>HHBBL</author><pubDate>Mon, 05 Jun 2023 22:40:55 +0800</pubDate><description><![CDATA[对于代码的大致理解就是文件中的字符被换算成数字存进了cbuf数组了，但具体是怎么存的，却不太清楚。大致可以猜出off代表cbuf数组会从哪个位置开始存字母的Ascii码值，而len代表一次会从文件读几个字符。上述都只进行了两次循环，都将abcd四个字母打印了出来，所以猜测循环终止是以是否读到文件中最后一个字母。源码的具体内容看不懂，但好像就是在记录position，当n+position=-1时，循环结束。在学习IO的学习过程中，对于像我这样的初学者，Reader类的read函数用像。]]></description><category></category></item><item><title><![CDATA[lamda表达式的学习]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/130918053</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/130918053</guid><author>HHBBL</author><pubDate>Sun, 28 May 2023 22:23:41 +0800</pubDate><description><![CDATA[意思就是接口实现了方法，方法就是类的上述方法名的构造方法，既然是构造方法，接口的函数自然不能有返回值。对于无参，实现了的方法就是上述方法名的无参参方法,写法上与有参相同，就是看接口的方法是有参还是无参。意思与上面无参不同的地方是实现类不用写参数类型，其就是接口的方法的参数类型，直接拿来在方法里用。意思就是重写了接口的方法，并且不需要管实现类的名字，变量能使用重写后的方法。有参无参写法相同，看接口方法是有参还是无参，对应上述类的有参或无参构造方法。意思就是接口实现了方法，方法就是类的上述方法名的有参方法。]]></description><category></category></item><item><title><![CDATA[java中的运行时异常和编译时异常的不同]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/130797120</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/130797120</guid><author>HHBBL</author><pubDate>Sun, 21 May 2023 22:27:14 +0800</pubDate><description><![CDATA[运行时异常是不可查的，因为他在应用程序程序的控制和处理能力之外，而且绝大多数是程序运行时不运行出现的状况，程序设计者无能为力，因此不必处理他们，不要求强制处置。如果只写声明，无非就是往上抛异常，但值得一提的是如果声明的是运行时异常，只要是运行时异常，似乎抛出的异常与声明的异常不相符是可以的。会发现他会让你必须对Count类里的异常进行声明或捕获，这就是运行时异常和编译时异常的不同。所谓编译时异常其实就是异常中出运行时异常及其子类以外的异常。异常分为  运行时异常  和   编译时异常。]]></description><category></category></item><item><title><![CDATA[try--finally的执行顺序]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/130670905</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/130670905</guid><author>HHBBL</author><pubDate>Sun, 14 May 2023 17:34:13 +0800</pubDate><description><![CDATA[为了保持这一顺序的严谨性，让中间变量j参与finally运行，而在try中保持原有i的值，看上去就像是先执行了try,再finally,符合程序的运行顺序。这很合理，finally优先执行（如果不优先执行，将意味着finally不被执行），然后i++，i的值变为11，再return。因为 try–finally的执行顺序明显违反了程序亘古不变的自上而下的运行顺序。try–finally的执行顺序是肯定的，但结果与顺序是否定的。try里面是10，就意味着finally的i++没被执行？]]></description><category></category></item><item><title><![CDATA[【无标题】java的匿名内部类的探究]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/130545345</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/130545345</guid><author>HHBBL</author><pubDate>Sun, 07 May 2023 18:35:07 +0800</pubDate><description><![CDATA[这个写法对于初学者看起来很怪，不看大括号里的内容，就像是创建了接口的对象，但是看大括号里的内容，不难知道是匿名了的实现类重写了接口的eat()方法，而run()是我自己加的，先不看。发现匿名类在toString()里似乎就是那么命名的，但讲道理，匿名类确实做到了匿名，没法使用他的类名。但有这样一种情况，我不在乎Animal的实现类叫什么，也不需要这个实现类能被用到其他类，能不能不写实现类的名字？既然是匿名类，也就是说没办法知道它的类名，而我们如果要调用它的run（）方法，就得知道类名，像这样。]]></description><category></category></item><item><title><![CDATA[动态绑定与静态绑定]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/130328496</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/130328496</guid><author>HHBBL</author><pubDate>Sun, 23 Apr 2023 20:42:47 +0800</pubDate><description><![CDATA[有静态就有动态，动态绑定就是当程序编译通过，运行时，看到方法直接在子类里找，因为既然通过了编译，也就说明父类有这个方法，且极大可能子类重写了这个方法，如果子类没有再去父类找，体现了程序的高效性。查了一下，这就是多态里的静态绑定，即编译时先在父类里找那个调用的方法，找到就编译通过。这二者有什么区别，单看右边明明都是Dog类型的对象，都是Animal的子类，为什么第一种运行子类的方法不通过？明明子类中的eat方法是存在的，函数编译却不通过。因为子类是有这个方法的，如果先找子类，程序的编译是能通过的。]]></description><category></category></item><item><title><![CDATA[子类是否默认调用父类的无参构造]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/130185377</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/130185377</guid><author>HHBBL</author><pubDate>Sun, 16 Apr 2023 18:21:14 +0800</pubDate><description><![CDATA[这里似乎没有再调用父类的无参，但我们在子类的无参构造里是写了super();就不会调用父类的无参构造，对于子类有参的情况也是一样，用super在第一行来调用父类有参就不会调用父类无参。从这里知道，唯一没有父类无参的情况是行不通的，子类似乎肯定会调父类的无参构造。查询资料，子类的无参，有参构造都会在第一行默认写上super();这里似乎默认调用了父类的无参构造，修改Test类。运行会报错，说明父类此时没有了系统默认的无参构造。用于调用父类的无参构造，也就是说怎么样都会调用。删除父类的有参与无参构造。]]></description><category></category></item><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/130047097</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/130047097</guid><author>HHBBL</author><pubDate>Sun, 09 Apr 2023 21:30:39 +0800</pubDate><description><![CDATA[经查询源码可知 是println里会调用 类的toString 方法，类的toString方法一般都是默认的返回地址值，而我们是相当于重写了一下toString方法，使他返回 name。进行调试，发现哪怕main里没调用toString,没写其他的，toString似乎也被执行了，将age改成了20！但在今天的学习中，我发现如果在Animal类中，加上这样一行代码。toString是个什么方法，为什么写出来，打印结果不再是地址？我们都知道运行结果会打印出cat的地址。在java学习中，看到这样的代码。]]></description><category></category></item><item><title><![CDATA[类数组的使用]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/129917369</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/129917369</guid><author>HHBBL</author><pubDate>Sun, 02 Apr 2023 21:49:11 +0800</pubDate><description><![CDATA[java有int 类型的数组，有String类型的数组，那为什么不能有类数组，今天在学习的时候，我是这么想的。可为什么一般数组一句话就行而类的数组似乎还要一句话一句话的为其开辟堆区的空间？也就是说new并未开辟空间来存数组各个成原的内容，各成员的地址都是空址。调试也会发现各个成员都有了地址，也就是都有了自己的空间。商品类，实际生活中，商品肯定是多个，而我总不能像这样。我想这应该是new底层原理的问题了，就不做探究了。就和普通定义数组那样，但运行的结果却是报错。就比如如果我定义这样一个类。]]></description><category></category></item><item><title><![CDATA[java的数组变量（新手的发现）]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/129657426</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/129657426</guid><author>HHBBL</author><pubDate>Sun, 19 Mar 2023 22:12:32 +0800</pubDate><description><![CDATA[在我们刚开始学习数组的时候，如果a和b各是一个数组，我们往往想用a=b来完成数组的复制，这在c语言中是不行的，会报错。一般来讲数组的复制要通过循环来一一赋值，但今天在java的学习中试了一下，不会报错，这就让我很疑惑，代码如下。查询资料，发现是java数组变量的概念没搞懂，a和b都是数组变量，可以进行赋值，但作用就只相当于a和b都是数组内容的指挥官，是等效的而已。可以看出,修改b数组实际上就是修改了a数组，并不是我想要的呢个创立一个新数组，用新的地址来存和数组a相同的元素。也能知道a与b的地址只是相等的。]]></description><category></category></item><item><title><![CDATA[【无标题】out 标签的使用，循环控制]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/129656887</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/129656887</guid><author>HHBBL</author><pubDate>Sun, 19 Mar 2023 21:43:19 +0800</pubDate><description><![CDATA[利用好标签能使我们循环的操作更加灵活简便，当然也可以用continue lable来使循环继续，非常简单。但如果我们不需要那么多结果呢。在对于像这种给钱找零的问题，我们往往需要使用多重循环，像以下代码。他往往会输出许多结果。]]></description><category></category></item><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/HHBBL/article/details/129470063</link><guid>https://blog.youkuaiyun.com/HHBBL/article/details/129470063</guid><author>HHBBL</author><pubDate>Sat, 11 Mar 2023 23:10:10 +0800</pubDate><description><![CDATA[switch语句的穿透，新手错误]]></description><category></category></item></channel></rss>