- 博客(57)
- 收藏
- 关注
原创 Java中的注解
Deprecated用@Deprecated注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。//凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器报错。编译器看到方法上有这个注解的时候,编译器会自动检查该方法是否重写了父类的方法。这个Target注解用来标注”被标注的注解“可以出现在哪些位置上。构造方法上,字段上,局部变量上,方法上,类上……第二:注解可以出现在类上,属性上,方法上,变量上等…
2024-02-16 09:50:27
462
原创 Java中通过反射机制访问对象属性
/给obj对象的no属性赋值2222。s.no=1111;//三要素:给s对象的no属性赋值1111。//打破封装(反射机制的缺点:打破封装,可能会给不法分子留下机会)//使用反射机制,怎么去访问一个对象的属性。//要素2:no属性。//我们不使用反射机制,怎么去访问一个对象的属性呢?//要素3:1111。//给obj对象(Student对象)的no属性赋值。//获取no属性(根据属性的名称来获取Field)//两个要素:获取obj对象的no属性的值。//两个要素:获取s对象的no属性的值。
2024-02-15 17:23:39
543
原创 Java中的类加载器
优先从启动类加载器中加载,这个称为“父”,“父”无法加载到,再从扩展类加载器中加载,这个成为“母”。双亲委派,如果都加载不到,才会考虑从应用类加载器中加载,直到加载到为止。通过类加载器加载,看到以上代码类加载器会找String.class文件,找到就加载,那么是怎么进行加载的呢?如果通过“启动类加载器”加载不到的时候,会通过“扩展类加载器”加载。如果“扩展类加载器”没有加载到,那么会通过“应用类加载器”加载。注意:应用类加载器专门加载:classpath中的类。首先通过"启动类加载器”加载。
2024-02-08 08:27:05
506
原创 Java中通过反射实例化对象
/newInstance() 这个方法会调用User这个类的无参数构造方法,完成对象的创建。注意:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以。//重点是:newInstance()调用的是无参构造,必须保证无参构造是存在的。//通过反射机制,获取Class文件,通过Class来实例化对象。//这是不使用反射机制,创建对象。
2024-02-07 08:13:44
212
原创 Java中获取Class的三种方式
/c1代表String.class文件,或者说c1代表String类型。//x代表String.class字节码文件,x代表String类型。
2024-02-06 08:30:21
717
原创 Java中的反射机制
java.lang.reflect.Field: 代表字节码中的属性字节码,代表类中的成员变量(静态变量+实例变量)java.lang.Class: 代表整个字节码,代表一个类型,代表整个类。java.lang.reflect.Constructor: 代表字节码中的构造方法字节码,代表类中的构造方法。java.lang.reflect.Method: 代表字节码中的方法字节码,代表类中的方法。
2024-02-05 08:36:50
251
原创 Java中的生产者和消费者模式
第一:wait和notify方法不是线程对象的方法,是java中任何一个Java对象都有的方法,因为这两个方式是Object类中自带的。5.wait方法作用:o.wait()让正在o对象上活动的线程t进入等待状态,并且释放掉t线程之前占有的o对象的锁。6.notify方法作用:o.notify()让正在o对象上等待的线程唤醒,只是通知,不会释放o对象上之前占有的锁。4.wait方法和notify方法建立在线程同步的基础之上。3.wait和notify方法不是线程对象的方法,是普通java对象都有的方法。
2024-02-04 08:50:39
443
原创 Java中实现线程的第三种方式
/JUC包下的,属于java的并发包,老JDK中没有这个包。系统委派一个线程去执行一个任务,该线程执行完任务之后,可能会有一个执行结果,我们怎么能拿到这个执行结果呢?return a+b;这种方式的缺点:效率比较低,在获取t线程执行结果的时候,当前线程受阻塞,效率较低。//而get()方法可能需要很久,因为get()方法是为了拿另一个线程的执行结果。//线程执行一个任务,执行之后可能会有一个执行结果。//main方法这里的程序要想执行必须等待get()方法的结束。//而另一个线程执行是需要时间的。
2024-02-03 09:06:01
323
原创 Java中的定时器
不过,这种方式在目前的开发中也很少用,因为现在有很多高级框架都是支持定时任务的。在实际开发中,目前使用较多的是Spring框架中提供的SpringTask框架,这个框架只要进行简单的配置,就可以完成定时器的任务。可以使用sleep方法,睡眠,设置睡眠时间,每到这个时间点醒来,执行任务,这种方式是最原始的定时器。//timer.scheduls(定时任务,第一次执行时间,间隔多久执行一次);定时器的作用:间隔特定的时间,执行特定的程序。//编写你需要执行的任务就行了。//假设这是一个记录日志的定时任务。
2024-02-02 08:26:42
482
原创 Java中的守护线程
一直在那里看着,每到00:00的时候就备份一次,所有的用户线程如果结束了,守护线程自动退出,没有必要进行数据备份了。2.守护线程的特点:一般守护线程是一个死循环,所有的用户线程只要结束,守护线程自动结束。//即使是死循环,但由于该线程是守护者,当用户线程结束,守护线程自动终止。其中具有代表性的就是:垃圾回收器(守护线程)t.setName("备份数据的线程");//启动线程之前,将线程设置为守护线程。注意:主线程main方法是一个用户线程。一类是:守护线程(后台线程)//主线程:主线程是用户线程。
2024-02-01 08:34:22
234
原创 队列的基础知识
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构。与栈结构不同的是,队列的两端都“开口”,要求数据只能从一端进,从另一端出。逻辑结构 与线性表相同,仍为一对一关系存储结构 用顺序队列或链队列存储即可访问结点时依照先进先出(FIFO)或后进后出(LILO)的原则数据对象:D={ai| ai∈ElemSet, i=1,2,...,n, n≥0 }
2024-01-31 12:52:32
1179
原创 Java中的线程安全
线程t1和线程t2,在线程t1执行的时候,必须等待t2线程执行结束,或者说在t2线程执行的时候,必须等待t1线程执行结束,两个线程之间发生了等待关系,这就是同步编程模型。以后在开发中,我们的项目都是运行在服务器当中,而服务器已经将线程的定义,线程对象的创建,线程的启动等,都已经实现完了。线程同步就是线程排队了,线程排队了就会牺牲一部分效率,没办法,数据安全第一位,只有数据安全了,我们才可以谈效率,数据不安全,没有效率的事。专业术语叫做:线程同步,实际上就是线程不能并发了,线程必须排队执行。
2024-01-31 09:14:10
358
原创 Java中的线程优先级
System.out.println(Thread.currentThread().getName()+"线程的默认优先级:"+Thread.currentThread);System.out.println(currentThread.getName()+"线程的默认优先级是:"+currentThread.getPriority());//t合并到当前线程中,当前线程受阻塞,t线程执行直到结束。//获取当前线程对象,获取当前线程的优先级。//main线程的默认优先级是:5。//设置主线程的优先级为1。
2024-01-30 08:25:43
443
原创 Java中的线程调度
/当前线程进入阻塞,t线程执行,直到t线程结束。当前线程才可以继续。优先级比较高的获取CPU时间片可能会多一些(但也不完全是,大概率是多的)那个线程的优先级比较高,抢到的CPU时间片的概率就高一些/多一些。让当前线程让位,让给其他线程使用。yield()方法的执行会让当前线程从”运行状态“回到”就绪状态“平均分配CPU时间片,每个线程占有的CPU时间片时间长度一样。有一些编程语言,线程调度模型采用的是这种方式。暂停当前正在执行的线程对象,并执行其他线程。2.java中提供了哪些方法是和线程调度有关系的?
2024-01-29 15:43:39
40
原创 Java中线程的sleep方法
/在执行的时候还是会转换成:Thread.sleep(1000*5);3.作用:让当前线程进入休眠,进入“阻塞状态”,放弃占有CPU时间片,让给其他线程使用。//这行代码的作用是:让当前线程进入休眠,也就是说main线程进入休眠。//终止t线程的睡眠(这种中断线程的方式依靠了java的异常处理机制)//希望5秒之后,t线程醒来(5秒之后主线程手里的活干完了)//这行代码出现在main方法中,main线程睡眠。//让当前线程进入休眠期,睡眠5秒。//问题:这行代码会让线程t进入休眠状态吗?
2024-01-28 08:23:16
987
原创 Java中实现线程的两种方式
/start()方法的作用是:启动一个分支线程,在JVM中开辟一个新的栈空间,这段代码任务完成之后,瞬间就结束了。System.out.println("分支线程是-->"+i);//run方法在分支栈的栈底部,main方法在主栈的栈底部。//启动成功的线程会自动调用main方法,并且run方法在分支栈的栈底部(压栈)System.out.println("分支线程是-->"+i);//这里是main方法,这里的代码属于主线程,在主栈中运行。//这并不是一个线程类,是一个可运行的类,它还不是一个线程。
2024-01-27 10:50:21
368
原创 Java中的多线程
这说明人类的反应速度很慢,就像一根钢针扎到手上,到最终感觉到疼,这个过程是需要”很长的“时间,在这个期间计算机可以进行亿万次的循环。最起码,现在的java程序中至少有两个线程并发,一个是垃圾回收线程,一个是执行main方法的主线程。对于单核的CPU来说,在某一个时间点上实际上只能处理一件事情,但是由于CPU的处理速度极快,多个线程之间频繁的切换程序执行,根人来的感觉是:多个事情同时在做!假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,互不干扰,各自执行各自的,这就是多线程并发。
2024-01-26 10:57:04
93
原创 Git基础知识
版本控制()是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件技术。实现跨区域多人协同开发追踪和记载一个或者多个文件的历史记录组织和保护你的源代码和文档统计工作量并行开发、提高开发效率跟踪记录整个软件的开发过程减轻开发人员的负担,节省时间,同时降低人为错误。
2024-01-25 13:00:25
1949
2
原创 Java中的File类
File f1 = new File("D:\\course\\01-开课\\开学典礼.ppt");File f3 = new File("D:\\course\\01-开课\\学习方法.txt");//D:\course\01-开课。C:\Drivers\Lan\Realtek\Readme,txt也是File对象。System.out.println("文件名:"+f1.getName());//如果D:\file不存在,则以文件的形式创建出来。//如果D:\file不存在,则以目录的形式创建出来。
2024-01-25 10:08:30
371
原创 Java中的HashMap集合
/s1.equals(s2)结果已经是true了,表是s1和s2是一样的,相同的,那么往HashSet集合中放的话,按说只能放进去1个。7.重点:放在HashMap集合key部分的元素,以及放在HashSet集合中的元素,需要同时重写hashCode()方法和equals()方法。重点:HashMap集合初始化容量必须是2的倍数,这也是官方推荐的,这是因为达到散列均匀,为了提高HashMap集合的存取效率,所必须的。假设将所有的hashCode()方法返回值都设定为不一样的值,可以吗,有什么问题?
2024-01-24 08:47:00
415
原创 Java中Map接口常用的方法
1=zhangsan 【注意:Map集合通过entrySet()方法转换成的这个Set集合,Set集合中元素的类型是Map.Entry<k,v>】2=lisi 【Map.Entry和String一样,都是一种类型的名字,只不过:Map.Entry是静态内部类,是Map中的静态内部类】Set<Map.Entry<k,v>> entrySet() 将Map集合转换成Set集合。System.out.println("键值对的数量:"+map.size());//1在这里进行了自动装箱。
2024-01-23 21:56:56
360
原创 Java中ArrayList集合
检索效率比较高(每个元素占用空间大小相同,内存地址是连续的,知道首元素内存地址,然后知道下标,通过数学表达式计算出元素的内存地址,所以检索效率比较高)8.这么多集合中,使用最多的集合是ArrayList集合,因为往数组末尾添加元素,效率是不受影响的。尽可能少的扩容,因为数组扩容效率比较低,建议在使用ArrayList集合的时候预估计元素的个数,给定一个初始化容量。//集合的size方法是获取当前集合中元素的个数,不是获取集合中的容量。//10的二进制位是:00001010 [10]
2024-01-23 08:22:08
455
原创 Java中集合元素的删除
重点:在迭代元素的过程中,一定要使用迭代器Iterator的remove方法,删除元素,不要使用集合自带的remove方法删除元素。重点:在迭代集合元素的过程中,不能调用集合对象的remove方法,删除元素c.remove(o);//出异常根本原因是:集合中元素删除了,但是没有更新迭代器(迭代器不知道集合变化了)//注意:此时获取的迭代器,指向的是那是集合中没有元素状态下的迭代器。//删除的一定是迭代器指向的当前元素。//迭代器去删除时,会自动更新迭代器,并且更新集合(删除集合中的元素)
2024-01-22 22:05:48
368
原创 线性表的链式存储结构
数据域:用于存储数据元素的值;游标:其实就是数组下标,表示直接后继元素所在数组中的位置;因此,静态链表中节点的构成用 C 语言实现为:int data;//数据域int cur;//游标}component;静态链表以next==-1作为其结束的标志。静态链表的插入、删除操作与动态链表的相同,只需要修改指针,而不需要移动元素。
2024-01-22 16:53:05
1622
原创 Java中Collection接口中常用的方法和Contains方法
关于java.util.Collection接口中常用的方法。1.Collection中能存放什么元素?没有使用“泛型”之前,Collection中可以存储Object的所有子类。使用了泛型之后,Collection中只能存储某个具体的类型。集合中不能直接存储基本数据类型,也不能存java对象,只是存储java对象的内存地址。2.Collection中的常用方法boolean add(Object e) 向集合中添加元素。
2024-01-22 10:04:22
488
原创 Java中的集合和实现类
1.集合概述1.1什么是集合?有什么用?数组其实就是一个集合。集合实际上就是一个容器,可以来容纳其他类型的数据。集合为什么说在开发中使用较多?集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有10条纪录,那么假设把这19条记录查询出来,在java程序中会将10条数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。
2024-01-21 16:11:14
478
原创 Java中的自定义异常
1.SUN提供的JDK内置的异常肯定是不够用的。public class MyException extends RuntimeException{ //运行时异常。public class MyException extends Exception{ //编译时异常。第二部:提供两个构造方法,一个无参数的,一个带有String参数的。//创建异常对象(只new了异常对象,并没有手动抛出)重写之后的方法不能比重写之前的方法抛出更多(更宽泛)的异常可以更少。//获取异常简单的描述信息。//打印异常堆栈信息。
2024-01-21 09:38:53
465
原创 Java中的finally字句
/退出JVM之后,finally语句中的代码就不执行了)1.在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常,//finally也是一个关键字,和try联合使用,使用在异常处理机制中。//finalize()是Object类中的一个方法,作为方法名出现。和try联合使用,finally语句块中的代码是必须执行的。//在finally语句块中的代码是一定会执行的。放在finally中的语句块中的代码是一定执行的。//finally中的代码是一定会执行的。
2024-01-20 15:04:51
465
原创 Java中的异常
注意:只要异常没有捕捉,采用上报的方式,此方法的后续代码不会执行,另外需要注意的是,try语句块中的某一行出现异常,该行后面的代码不会执行。1.8注意:Java中异常发生之后,如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道了这个异常发生,只有一个结果,终止java程序的执行。怎么能做到,异常发生了也不影响程序的执行。catch进行捕捉。思考:异常发生之后,如果我选择上抛,抛给了我的调用者,调用者需要对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。
2024-01-20 08:46:59
938
原创 Java中对日期的处理
/注意:字符串的日期格式和SimpleDateFormat对象指定的日期格式要一致,不然会出现异常:java.text.ParseException。System.out.println() 【println()方法不是System类的,是PrintStream类的方法】//将日期类型Date,按照指定的格式进行转换:Date 转换成具有一个格式的日期字符串 String。//输出的应该不是一个对象的内存地址,应该是一个日期字符串。//获取系统当前时间(精确到毫秒的系统当前时间)
2024-01-19 21:19:37
379
原创 Java中的包装类
/int retValue = integer.parseInt("中文");3.8中包装类中其中6个都是数字对应的包装类,他们的父类都是Number,可以先研究一下Number中公共的方法。//+两边要求是基本数据类型的数字,z是包装类,不属于基本数据类型,这里会进行自动拆箱,将z转换成基本数据类型。//等同于:Integer z = new Integer(1000)
2024-01-19 10:52:58
339
原创 Java中的String类
看过源代码,String类中有一个byte[]数组,这个byte[]数组采用了final修饰,因为数字一旦创建长度不可变,并且被final修饰的引用一旦指向某个对象之后,不再指向其他对象,所以String是不可变的!3.java中规定,双引号括起来的字符串,是不可变的,也就是说”abc"自出生到最终死亡,不可变,不能变成“abcd",也不能变成"abce";4.在JDK当中双引号括起来的字符串,例如"abcd""def"都是直接存储在“方法区”的“字符串常量池”当中的。//97是a,98是b,99是C;
2024-01-19 09:16:29
426
原创 几种常见的算法
冒泡排序法原始数据:3 2 7 6 8第1次循环:(最大的跑到最右边)2 3 7 6 8(3和2比较,2<3 所以2和3交换位置)2 3 7 6 8(3和7比较,3<7 所以不需要交换位置)2 3 6 7 8(6和7比较,6<7 所以6和7交换位置)2 3 6 7 8(7和8比较,7<8 所以不需要交换位置)经过第1次循环,此时剩下参与比较的数据:2 3 6 7第2次循环:2 3 6 7(2和3比较,2<3,所以不需要交换位置)2 3 6 7(3和6比较,3<6,所以不需要交换位置)
2024-01-18 21:47:35
3743
原创 Java中的数组
Array1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object2.数组实际上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合.)数组:字面意思是“一组数据”3.数组当中可以存储“基本数据类型”的数据。4.数组因为是引用类型,所以数组对象是堆内存当中。(数组是存储在堆当中的)5.数组当中如果存储的是“Java对象”的话,实际上存储的是对象的“引用(内存地址)”6.数组一旦创建,在java中规定,长度不可变,(数组长度不可变)
2024-01-18 17:55:22
378
原创 阿里云环境搭建
SecureCRT是一款支持SSHSSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服 务器主机的软件。SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT的SSH协议支持DES,3DES 和RC4密码和密码与RSA鉴别。在日常工作中,会经常用来连接linux服务器。例如,SecureCRT使用截图SecureFXSecureCRT中也自带了SecureFX。
2024-01-18 10:35:50
1508
原创 MySQL数据库安装和配置
解压出来的⽬录即为MySQL的安装路径: 建议把这个密码复制下来临时保存到记事本中,以备使⽤。 接下来使⽤如下命令启动数据库服务:在任务管理器的[服务]⾯板可以查看到刚刚安装成功的MySQL服务:输⼊连接名称、IP、端⼝、账号、密码配置完毕之后可以先点击连接测试,没有问题确定保存即可。
2024-01-16 22:20:13
1009
原创 Java中的Object类中的部分方法
关于Object类中的toString()方法1.源代码长什么样?源代码上toString()方法的默认实现是:类名@对象的内存地址转换为十六进制的形式2.SUN公司设计toString()方法的目的是什么?toString()方法的作用是什么?toString()方法的设计目的是:通过调用这个方法可以将一个“java对象”转换成字符串表示形式。3.其实SUN公司开发java语言的时候,建议所有的子类都去重写toString()方法。
2024-01-16 16:18:12
990
1
原创 Java中的抽象类以及接口及应用
类到对象是实例化,对象到类是抽象抽象类:1.什么是抽象类?类和类之间具有共同特征,将这些共同特征提取出来,形成抽象类。类本身是不存在的,所以抽象类无法创建对象(无法实例化)。2.抽象类属于什么类型?抽象类也属于引用数据类型。3.抽象类怎么定义?【修饰符列表】 abstract class 类名{类体;4.抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的,子类继承抽象类,子类可以实例化对象。5.final和abstract不能联合使用,这两个关键字是对立的。
2024-01-16 09:46:16
1087
1
原创 Java中的包机制、final和super关键字
关于java语言当中的包机制:1.包又被称为package,java中引入package这种语法机制主要是为了方便程序的管理。不同功能的类被分门别类放到不同的软件包当中,查找比较方便,管理比较方便,易维护。2.怎么定义package呢?—在java源程序的第一行上编写package语句。—package只能编写一个语句—语法结构:package 包名;3.包名的命名规范:公司域名倒序+项目名+模块名+功能名;采用这种方式重名的纪律较低。因为公司域名具有全球唯一性。
2024-01-14 15:28:06
880
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人