- 博客(18)
- 收藏
- 关注
原创 python的类属性和全局变量
在类内的变量为类属性变量,方法内使用需要加上类名,即类名.变量名指定该属性变量。对于在类外的变量,称为全局变量,类内使用需要加上global,否则会报错。
2024-01-03 15:22:35 480 1
原创 面试复盘(一)
当一个方法被调用,Java虚拟机就会在栈中为该方法分配一个新的栈帧,用于存储该方法所需的相关信息,比如方法的参数、局部变量、返回地址等。因此,在Java程序开发中,需要根据具体的需求来选择适当的内存存储方式,以保证程序的性能和可靠性。在该阶段,CMS 会从根节点开始遍历整个对象图,并标记出所有存活的对象,以及所有与存活对象有关系的对象,将这些对象标记为不可回收状态。复制算法:该算法将堆分为两个区域,内存分配时只使用一个区域,当这个区域满了时,将所有存活的对象复制到另一个区域中,然后清除原来的区域。
2023-03-25 22:00:15 443
原创 JAVA基础-线程安全(续)
可见性是指一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。双循环锁很容易出现死锁问题,此时利用wait()方法和notifyAll()方法让线程2等待,释放锁,让线程1得到objB的资源,notifyAll()方法是唤醒当前对象上的等待线程;以上程序运行后,当线程A启动后,线程B启动并将flag1赋值为false,如果不加volatile修饰flag1,线程A中的flag1仍然是true,volatile的作用是保持flag1的可见性,但volatile不能保证线程安全。
2023-02-22 23:18:57 174
原创 JAVA基础-线程安全
想要保证线程自增过程中,其他线程不能修改,就要给修改变量的线程上锁,因为锁具有互斥性,同线程只有一个获取到锁,其他线程如果要获取就会发生阻塞,等线程结束释放锁,其他线程才可以竞争锁。操作不是原子性的:线程的自增操作主要是读取数据,加1,放回内存,在线程1修改的过程中其他线程都是可以读取数据进行操作的。当多个线程操作同一个变量时,由于读取修改时间不同,读到的也许是其他线程未修改完的数据。线程执行方式:线程间是抢占式执行的,谁先抢到谁就执行,用户是不能干预的。synchronized 关键字。
2023-02-16 00:18:06 90
原创 JAVA基础-线程小球
第三步:创建监听器类,主要监听鼠标动作,按下时获取坐标并创建小球对象,这里是初始化一个动态数组,调用add()方法将创建的小球对象加入数组中,在后面线程类中会从数组中取出小球并绘制。主要实现由一个线程控制30个小球运动,最终效果是每点击一次界面,都会在该位置生成随机大小的小球,小球以随即速度做直线运动(会回弹),生成30个小球后不能再点击。第四步:创建线程类,使用runnable接口实现线程,重写run方法,从数组中取出小球,判断小球是否运动出界面,并且要画一个白球盖住上一个小球,再绘制当前小球。
2023-02-13 12:06:53 181
原创 JAVA基础-进程与线程
第一种方式是继承Thread类,如果一个类继承了Thread类,那么就没办法继承其它的类了,有一点不灵活,第二种方式就是为了解决第一种方式的单继承不灵活的问题,所以平常使用就使用第二种方式。在并行(同时长期执行多个任务)和并发(短时间执行大量的任务)的情况下以及流水线式执行任务(流水线的每个环节都需要一个持续工作的线程)时会使用到多线程。线程:CPU 可以执行的最小调度单元 负责当前进程中程序的执行,一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。进程:操作系统中资源分配的基本单位。
2023-02-08 18:22:17 89
原创 JAVA基础-接口与抽象类
例如接口Student继承了ActionListener,MouseListener两个接口,当类ImpStudent实现接口Student时,就不能只重写Student接口内的抽象方法,ActionListener,MouseListener两个接口的抽象方法全都要重写,否则会报错。接口中声明的方法隐式地声明为public abstract,这种方法是不能有具体代码实现的。这里要注意因为该接口继承了父接口所有的抽象方法,那么如果有类实现该接口,该接口以及该接口的父接口所有的抽象方法要全部重写。
2023-02-07 23:04:42 177
原创 JAVA基础-链表
链表由一系列结点组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。链表在插入的时候速度较快,可以达到O(1)的复杂度,但是查找操作较慢,需要O(n)的时间,线性表和顺序表查找操作的时间复杂度分别是O(logn)和O(1)。链表的物理存储结构是非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接的次序实现的.利用尾节点last尾插法插入结点。先查找结点比对结点值再删除。在指定结点前添加结点。
2023-02-02 17:56:38 775
原创 JAVA基础-泛型
格式: 类名的右边定义 ,在括号中定义个通配符,只有在使用时才告知类型,常见的类型参数有T、E、K、V等,T可以代表任意类,E表示Element,K和V互相搭配使用。泛型:指在定义时不会设置参数的具体类型,而是在类使用时(创建对象)再进行类型的定义。>表示可以接受该类所有类型的泛型变量。
2023-02-02 16:37:26 67
原创 JAVA基础-利用数组实现线性表
1.有下标索引,基于下标操作速度很快2.数组存储占用一块连续的空间3.插入操作慢,且增加数据不能扩容4.删除操作需要后置数据前移1. 链表数据以节点的形式分散存储2.不需要扩容3.删除和插入操作很快这里附上全部代码//元素数量,下一次要存储的下标//当前数组链表长度//默认的初始容量//简单的构造方法,不传入参数size=0;//初始化方法size=0;//初始化数组链表长度,传入参数为自定义长度,分三种情况//必须大于0。
2023-02-02 01:11:13 518
原创 JAVA基础-登录注册界面开发
创建一个主函数,在主函数中 创建LoginUI 对象调用 initUI()方法。2: 打开ActionListener 的源码 将其中的方法复制到这个类中。5: 按钮对象通过调用 addActionListener 方法添加监听器对象。4: 将写好的类拿到按钮对象所在的位置创建一个对象。3: 在方法中加入点击按钮之后要执行的代码。创建一个类和方法(设置窗体和组件对象)创建一个窗体对象 - JFrame。创建组件对象、按钮、输入框、标签等。设置组件对象的属性以及内容。设置窗体对象的相关属性。
2023-01-31 01:06:31 1381 1
原创 JAVA基础-类型转换
自动转型:将较小的类型转换为较大的类型。强制转型:将较大的类型转换为较小的类型。(2)不安全的强制转型。(1)安全的强制转型。
2023-01-31 00:21:04 99
原创 JAVA基础-方法重载与重写
方法重载:同一个类或接口中可以存在多个同名的方法,但参数必须不一致(类型 顺序 数量)。例如:下面有三个同名的add方法,但是根据输入参数个数不同,有不同的输出。方法重写:子类中重写父类的方法,方法名相同,参数类型相同,返回值相同。返回值类型可以改子类的返回值类型,但必须是父类返回值类型的同类与子类。访问权限修饰符比父类的构造方法权限不能更小。子类以及子类对象会优先调用重写之后的方法。被final修饰的不能被重写。
2023-01-31 00:15:14 88
原创 JAVA基础-继承
子类是不继承父类的构造方法的,它只是调用(隐式或显式)。如果父类的构造方法带有参数,则必须在子类的构造方法中显式地通过 super 关键字调用父类的构造方法并配以适当的参数列表。如果父类构造方法没有参数,则在子类的构造方法中不需要使用 super 关键字调用父类构造方法,系统会自动调用父类的无参构造方法。注意:类只能实现接口而不能继承,例如类C实现接口A、B。接口与接口间的继承:例如,接口C继承接口A和B。子类与父类不同包,使用默认访问权限的成员。同一个包中子类,其他类。访问修饰符的作用范围。
2023-01-31 00:01:43 161
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人