Java
文章平均质量分 92
大块奶酪----
故不积跬步,无以至千里;不积小流,无以成江海
展开
-
JAVA笔记十四:并发(三)
在A线程中lock1,线程B中lock2上锁,但在执行完成时,线程A要等待lock2解锁即要等待线程B执行完,线程A在一直等待,但在B线程中,又要等待lock1解锁(线程A解锁),彼此相互约束,造成“死锁”。例如:A线程给B线程转账,B线程要给C线程转账,C线程给A线程转账,但A线程的余额不足以给B线程转账,所以A线程等待C线程转入,但C要等待B的转入,三个线程都在彼此等待转账,最终导致死锁。这个结构可以确保任何时刻只有一个线程进入临界区,一旦一个线程锁定了锁对象,其他任何线程都无法通过lock语句。原创 2023-01-27 21:25:52 · 104 阅读 · 0 评论 -
JAVA笔记十三:并发(二)
直到同步块中的代码完全被执行完之后,对象的标识符为1,该线程才可以执行同步块中的代码。礼让只是对计算机资源同时请求时,让出自己所抢到的运行权,对于支持多任务的操作系统,不需要调用yield方法,操作系统会为线程分配CPU时间片执行。在其他线程想要执行时,必须要等到线程一执行完毕才可以继续执行,但if条件要求sum大于0,所以当线程一执行完后,其他线程无法进行“减票”操作。高优先级的线程比低优先级的线程有更高的几率得到执行,实际上这和操作系统及虚拟机版本相关,有可能即使设置了线程的优先级也不会产生任何作用。原创 2023-01-25 10:31:56 · 85 阅读 · 0 评论 -
JAVA笔记十二:并发
计算机可以将多种活动同时进行,这种思想在Java中称为,而将并发完成的每一件事情称为。程序员可以在程序中执行多个线程,每一个线程完成任务,并与其他线程并发执行,这种机制称为多线程。原创 2023-01-19 12:37:15 · 120 阅读 · 0 评论 -
JAVA笔记十一:集合类(三)
如果 key 对应的 value 不存在,则返回该 value 值,如果存在,则返回通过 remappingFunction 重新计算后的值。返回值:当key存在时返回key所对应的value,, 如果所指定的 key 不在 HashMap 中存在,则返回 null。集合框架不认为映射是一个集合,不过可以得到映射的视图(view),来实现了Collection接口或某个子接口的对象。这些集合的对象是不可修改的,如果需要一个可更改的集合则需要把这个不可修改的集合传入到构造器中。原创 2023-01-15 21:13:54 · 131 阅读 · 0 评论 -
JAVA笔记十一:集合类(二)
使用列表可以根据索引而找到相应元素,而当元素位置未知且元素个数较多,这时时间复杂度较大,所以当不考虑元素的顺序时,可以构造集合来实现快速查找,但缺点是无法控制元素出现的次数,因为集合中的元素是无序的。可用add方法添加元素。add方法若元素确实被改变返回ture,反之返回false,在set集合中添加元素,而这个元素已经在set中存在,则add方法没有实效,因为set集合中元素不能重复。Java迭代器查找一个元素只能使用next方法,当调用next方法时,迭代器会越过下一个元素,返回上一个元素的引用。原创 2023-01-13 22:45:26 · 211 阅读 · 0 评论 -
JAVA笔记十:集合类
Java.util包中提供了一些集合类,这些集合类又被称为容器。集合类与数组不同之处是:数组长度是固定的,集合长度是可变的;常用的集合有List集合、Set集合、Map集合,其中List集合与Set集合继承了Collection接口。原创 2023-01-10 23:05:02 · 106 阅读 · 0 评论 -
JAVA笔记九:内部类
外部类非静态内部类是一个类中嵌套着另外一个类。它有访问外部类成员的权限, 通常被称为内部类。内部类对象的创建:因为内部类嵌套在外部类中,所以必须先创建外部类,后利用外部类对象创建内部类对象。int x = 10;int y = 5;首先创建外部类对象,利用外部类对象再次创建内部类对象,需要注意的是:外部类名.内部类名 内部类对象 = 外部类对象 new 内部类构造器内部类可以利用private、protected修饰符修饰,若希望外部类不能访问内部类,则可以使用private修饰符。原创 2023-01-09 23:20:37 · 82 阅读 · 0 评论 -
JAVA笔记八:接口、lambda表达式与内部类
表达式System.out::println是一个方法的引用(method reference),它指示编译器生成一个函数式接口的实例,覆盖这个接口的抽象方法来调用给定的方法,在这个例子中,会生成一个ActionListener,.它的actionPerformed(ActionEvent e)方法要调用System.out.println(e)。很多函数接口的抽象方法是无参数的,如线程接口Runnable接口只有一个run()方法,这样的无参抽象方法在lambda表达式中使用“()”表示。原创 2023-01-06 16:31:37 · 230 阅读 · 0 评论 -
JAVA笔记七:反射
反射库(reflection library)提供了与丰富且精巧的工具集,可以用来编写能够动态操纵Java代码的程序。反射机制可以用来:1、在运行时分析类的能力2、在运行时检查对象3、实现泛型数组操作代码4、利用Method对象,这个对象很像C++中的函数指针。原创 2022-12-30 21:11:28 · 108 阅读 · 0 评论 -
JAVA笔记六:继承(二)
虽然构造的list的容量为10,初始时size为0,add追加1个元素后list.size()=1,最终size值为17,即list中有17个元素。int compareTo(E other):如果枚举类出现在other之前,返回一个负整数,若this==other,返回0,否则返回一个正整数。使用Java中的另一个类,名为ArraysList,其类似与数组,但在添加或删除元素时,它能够自动的调整数组容量。包装器类是不可改变的,即一旦构造的包装器,就不允许更改包装在其中的值。//返回字符串“SMALL”原创 2022-12-23 21:21:52 · 74 阅读 · 0 评论 -
JAVA笔记五:继承
定义的类为抽象类,使用这个关键字定义的方法称为抽象方法。原创 2022-12-15 16:47:00 · 3955 阅读 · 0 评论 -
JAVA笔记四:包(package)与JAR文件
比如abc.edu.cn,逆序得到包名为cn.edu.abc,然后可以追加一个工程名corejava,在把类Employee放在这个包里,那么这个类的。标记为public的部分可以由任意类使用,标记为private的部分只能由定义他们的类使用,如果没有指定public或private,这个部分(类、方法、变量)可以被同一个包中的所有方法访问。注意:使用"*"只能导入一个包中的所有类,而不能使用import java.*或import java.*.*导入以java为前缀的所有包。使用import语句。原创 2022-12-10 22:34:48 · 922 阅读 · 0 评论 -
JAVA笔记三:对象与类(二)
/每个Employee对象都有自己的一个id字段,但这个类的所有实例将共享一个nextId字段。字段与局部变量的一个重要区别:方法中的局部变量明确的初始化,但是在类中,如果构造器没有为字段设置初值,那么将会设置为默认值:数值为0,布尔为false,对象引用为null。在类第一次加载的时候,将会进行静态字段的初始化,所有静态字段的初始化方法以及静态初始化块都将依照类声明中出现的顺序执行。在类中无方法名的代码段,称为初始化块,构造器在构造对象时,首先运行初始化块,后运行构造器的主体部分。原创 2022-12-10 18:15:03 · 155 阅读 · 0 评论 -
JAVA笔记二:对象与类(一)
/该语句定义了一个对象变量deadline,他可以引用Date类型的对象,但他不是一个对象,且实际上也没有引用任何对象,此时还不能在该变量上使用任何方法Date的方法。raiseSalary方法有两个参数,第一个参数为隐式参数,是出现在方法名前的Employee类型的对象。final修饰符用于类型为基本类型或不可变类的字段(类中的所有方法都不会改变其对象,这样的类为不可变的类,如String类)。实现封装的关键是绝对不能让类中的方法直接访问其他类的实例字段,程序只能通过对象的方法与对象数据进行交互。原创 2022-12-10 10:28:44 · 162 阅读 · 0 评论 -
JAVA笔记一:基本知识
如果源码.java文件使用UTF-8的编码方式,在cmd中使用encoding指定UTF-8的编码方式,并在其目录下会生成.class文件。关键字class表明java程序中的所有内容包含在类中,类是构建所有java程序与applet的构建块。如果x为int,则x+=3.5等价于(int)(x+=3.5)使用关键字static final声明一个类常量,该常量可以被其他方法使用,即类中的全局常量。6、字符串不能使用==来比对是否相等,要用"hello".equals("hello");原创 2022-12-10 10:21:51 · 138 阅读 · 0 评论