首页 文章 精选 留言 我的

精选列表

搜索[java],共10000篇文章
优秀的个人博客,低调大师

java基础学习_常用类小结

看看下面的类,是否都熟悉,简要说明每个类主要是干什么呢? Object:是类层次结构的根类,所有类都直接或者间接的继承自该类。 Scanner:获取键盘录入数据的类。 String:针对字符串的常见操作的类。 StringBuffer/StringBuilder:字符串缓冲区类,提高字符串的操作效率。 Arrays:针对数组进行操作的工具类。 Integer:把int基本数据类型封装成Integer引用数据类型,可以调用方法了,最主要作用是可以把String引用数据类型转换int基本数据类型了。 Character:把char基本类型封装成Character引用数据类型,可以调用方法了。了解几个方法就可以了。 Pattern:正则表达式的编译表示形式。模式对象。 Matcher:匹配器对象。 Math:针对数学运算操作的类。 Random:产生随机数的类。 System:系统类,提供了几个有用方法。 BigInteger:关于大整数的运算的类。 BigDecimal:关于浮点数的运算用这个,不会有精度的丢失。 Date:针对日期操作的类,可以精确到毫秒。 DateFormat:针对日期进行格式化或者针对字符串(文本)进行解析的类。 Calendar:日历类,把所有的日历字段(成员变量)进行了封装,要什么,自己使用获取方法,然后拼接。 Object:是类层次结构的根类,所有类都直接或者间接的继承自该类。 Scanner:获取键盘录入数据的类。 String:针对字符串的常见操作的类。 StringBuffer/StringBuilder:字符串缓冲区类,提高字符串的操作效率。 Arrays:针对数组进行操作的工具类。 Integer:把int基本数据类型封装成Integer引用数据类型,可以调用方法了,最主要作用是可以把String引用数据类型转换int基本数据类型了。 Character:把char基本类型封装成Character引用数据类型,可以调用方法了。了解几个方法就可以了。 Pattern:正则表达式的编译表示形式。模式对象。 Matcher:匹配器对象。 Math:针对数学运算操作的类。 Random:产生随机数的类。 System:系统类,提供了几个有用方法。 BigInteger:关于大整数的运算的类。 BigDecimal:关于浮点数的运算用这个,不会有精度的丢失。 Date:针对日期操作的类,可以精确到毫秒。 DateFormat:针对日期进行格式化或者针对字符串(文本)进行解析的类。 Calendar:日历类,把所有的日历字段(成员变量)进行了封装,要什么,自己使用获取方法,然后拼接。我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】

优秀的个人博客,低调大师

java中多线程的控制

1.需求: 用三个线程按顺序输出A,B,C十次,且不乱序。 2.相关方法: synchronized关键字 synchronized可以锁住代码段不被多个线程同时执行,可以锁住对象,也可以进行全局锁。 参考:http://blog.csdn.net/luoweifu/article/details/46613015 jion() t.join(); //调用join方法,等待线程t执行完毕 t.join(1000); //等待 t 线程,等待时间是1000毫秒 wait(), notify(), notifyAll 1)wait()、notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写。 2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁,或者叫管程) 3)调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程; 4)调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程; 看到这个需求,我头脑里第一印象就是使用synchronized 那么接下来的就很简单了 3.实现 public class ThreadControl { public static Count count = new Count(0); public static void main(String arg[]) { MyThread myThreadA = new MyThread(count); MyThread myThreadB = new MyThread(count); MyThread myThreadC = new MyThread(count); myThreadA.start(); myThreadB.start(); myThreadC.start(); } } class Count{ private int count; Count(int count) { this.count = count; } public synchronized int inc() { if(count%3==0) { System.out.print("A"); }else if(count%3==1) { System.out.print("B"); }else if(count%3==2) { System.out.println("C"); } count++; return count; } } class MyThread extends Thread{ private Count count; MyThread(Count count){ this.count = count; } @Override public void run() { super.run(); while (count.inc()<30); } } 我用synchronized给inc()方法上了锁。 运行结果: ABC(1) ABC(2) ABC(3) ABC(4) ABC(5) ABC(6) ABC(7) ABC(8) ABC(9) ABC(10) AB 我只想打印10次ABC,但是最后多出了AB。 当我把myThreadB.start()和myThreadC.start()注释掉后就正常了。 我认为原因是当count=29时,三个线程都在while循环中,而count.inc()又是先执行再获得返回值的, 线程无法及时得知count=30,所以会多打印2次。 这种方法明显需要优化,只需要在打印前加上一个判断即可 public synchronized int inc() { //打印前判断 if(!(count<30)) { return count; } count++; if(count%3==1) { System.out.print("A"); }else if(count%3==2) { System.out.print("B"); }else if(count%3==0) { System.out.println("C("+count/3+")"); } return count; } 其实上面是输出控制,不是线程控制 4.后序相关 我们同样可以用Lock来加锁,实现对线程的控制。 参考下面的网站:http://ifeve.com/locks/ 里面提到一个可重入的问题,不过我个人对于可重入不太理解,大家得自己研究一下了。

优秀的个人博客,低调大师

Java中方法重写的应用

方法重写的应用 当子类需要父类的功能,而功能的主体子类还有自己特有的内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类自己特有的内容。 1 /* 2 方法重写:子类中出现了和父类中方法声明一模一样的方法(方法名、参数列表和返回值类型都一样),也被称为方法覆盖、方法复写。 3 4 方法重载:本类中出现的方法名一样,参数列表不同,与返回值无关的方法。 5 6 子类的成员方法名称和父类中的成员方法名称一样时,这个怎么访问呢? 7 通过子类对象访问一个成员方法的查找顺序: 8 1.在子类的成员方法中找,有就使用。 9 2.在父类的成员方法中找,有就使用。 10 3.都找不到,就报错。 11 12 方法重写的应用: 13 当子类需要父类的功能,而功能的主体子类还有自己特有的内容时,可以重写父类中的方法, 14 这样,即沿袭了父类的功能,又定义了子类自己特有的内容。 15 16 案例: 17 A:定义一个手机类。 18 B:通过研究,我发明了一个新手机,这个手机的作用是在打完电话后,可以听天气预报。 19 按照我们基本的设计,我们把代码给写出来了。 20 但是呢?我们又发现新手机应该是手机,所以,它应该继承自手机。 21 其实这个时候的设计,并不是最好的。 22 因为手机打电话功能,是手机本身就具备的最基本的功能。 23 所以,我的新手机是不用在提供这个功能的。子类注释掉打电话的功能, 24 但是,这个时候,打电话功能就没有了。这个不好。 25 最终,还是要加上这个功能。 26 由于它继承了手机类,所以,我们就直接使用父类的功能即可。 27 那么,如何使用父类的功能呢?通过super关键字调用即可。 28 */ 29 30 class Phone { 31 public void call(String name) { 32 System.out.println("给"+name+"打电话"); 33 } 34 } 35 36 class NewPhone extends Phone { 37 public void call(String name) { 38 //System.out.println("给"+name+"打电话"); 39 super.call(name);//继承父类的功能 40 System.out.println("可以听天气预报了");//子类自己特有的功能。 41 } 42 } 43 44 class ExtendsDemo9 { 45 public static void main(String[] args) { 46 NewPhone np = new NewPhone(); 47 np.call("林青霞"); 48 } 49 } 我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册