Java
基础知识和个人笔记总结
SimpleProgramming17
Java,大数据,Python喜欢算法。
分享一些后端知识,记录学习过程。
软件工作遵循骑行自行车第一定律:不论你去哪,你都会顶风骑上坡。
展开
-
模块八、集合
使用ArrayList替换数组代码:这些数组代码用于实现银行和客户间,以及客户与他们的账户间的关系的多重性。实训目的:使用集合实训说明:修改Bank 类修改Bank 类,利用ArrayList实现多重的客户关系,不要忘记倒入必须的java.util类1.将Customer 属性的声明修改为List 类型,不再使用numberOfCustomers属性。2.修改Bank 构造器,将customers 属性的声明修改为List 类型,不再使用numberOfcustomers属性3.修改addC原创 2020-12-02 22:30:38 · 1027 阅读 · 0 评论 -
模块七、自定义异常
将建立一个OverdraftException异常,它由Account 类的withdraw()方法抛出。实训目的:自定义异常实训说明:创建OverdraftException类1.在banking.domain包中建立一个公有类OverdraftException. 这个类扩展RuntimeException类。2.添加一个double 类型的私有属性deficit.增加一个公有访问方法getDeficit3.添加一个有两个参数的共有构造器。deficit 参数初始化deficit 属性原创 2020-12-02 22:00:58 · 1639 阅读 · 0 评论 -
模块六、单例模式
创建修改CustomerReport类;修改Bank 类来实现单例设计模式:实训目的:单例模式。提示:创建CustomerReport类1.在前面的银行项目练习中,“客户报告”嵌入在TestBanking应用程序的main 方法中。在这个练习中,该代码被放在,banking 包的CustomerReport类中。 修改TestBanking类的代码,通过下面的代码来生成报表report.generateReport();// Generate a report接下来的任务是修改Bank类,使原创 2020-11-30 11:29:10 · 1440 阅读 · 1 评论 -
模块五 *扩展练习2、实现更为复杂的透支保护机制
使用客户储蓄账户完成透支保护。实训目的:继承、多态、方法的重写。说明:修改SavingAccount类1.仿照练习1“Account类的两个子类”一节实现SavingsAccount类。2.SavingAccount类必须扩展Account类。3.该类必须包含一个类型为double的interestRate属性4.该类必须包括一个带有两个参数(balance和interest_rate)的公有构造器。该构造器必须通过调用super(balance)来将balance参数传递给父类构造器修原创 2020-11-27 20:31:26 · 1611 阅读 · 3 评论 -
模块五 扩展练习1、创建客户的账户数组,实现客户与账户的多重关系
扩展练习1、创建客户的账户数组,实现客户与账户的多重关系实训目的:instanceof运算符的应用提示:修改Customer类1.修改Customer类来处理具有多种类型的联合账户。(例如用数组表示多重性一节所作的,该类必须包括以下的公有方法:addAccount(Account),getAccount(int)和getNumOfAccounts()。每个Customer可以有多个Account。(声明至少有5个)2.完成TestBanking程序该程序创建一个客户和账户的集合,并生成这些原创 2020-11-27 13:39:35 · 1801 阅读 · 0 评论 -
模块五、Account类的两个子类
练习1、在银行项目中创建Account的两个子类:SavingAccount和CheckingAccount实训目的:继承、多态、方法的重写。提示:创建Account 类的两个子类:SavingAccount和CheckingAccount子类a. 修改Account 类;将balance 属性的访问方式改为protectedb. 创建SavingAccount类,该类继承Account 类c. 该类必须包含一个类型为double 的interestRate属性d. 该类必须包括带有两个参原创 2020-11-26 22:22:04 · 5124 阅读 · 0 评论 -
模块四、用数组表示多重性
将用数组实现银行与客户间的多重关系。实训目的:在类中使用数组存储客户。提示:对银行来说,可添加Bank 类。Bank 对象跟踪自身与其客户间的关系。用Customer 对象的数组实现这个集合化的关系。还要保持一个整数属性来跟踪银行当前有多少客户。a. 创建Bank 类b. 为Bank类增加两个属性:customers(Customer对象的数组) 和numberOfCustomers(整数,跟踪下一个customers数组索引)c. 添加公有构造器,以合适的最大尺寸(至少大于5)初始化cus原创 2020-11-26 12:03:20 · 1173 阅读 · 0 评论 -
模块三、修改存款、提款方法
修改withdraw 方法以返回一个布尔值,指示交易是否成功。实训目的:使用有返回值的方法。提示:1.修改Account类a. 修改deposit方法返回true(意味所有存款是成功的)。b. 修改withdraw方法来检查提款数目是否大于余额。如果amt小于balance, 则从余额中扣除提款数目并返回true,否则余额不变返回false。2.在主目录编写并运行TestBanking程序,将看到下列输出;(仅做参考)Creating the customer Jane Smith.Cr原创 2020-11-26 11:28:59 · 1549 阅读 · 0 评论 -
模块二、添加Customer 类
扩展银行项目,添加一个Customer 类。Customer 类将包含一个Account对象。实训目的:使用引用类型的成员变量。提示:在banking包下的创建Customer类。该类必须实现上面的UML图表中的模型。a. 声明三个私有对象属性:firstName、lastName和account。b. 声明一个公有构造器,这个构造器带有两个代表对象属性的参数(f 和l)c. 声明两个公有存取器来访问该对象属性,方法getFirstName和getLastName返回相应的属性。d. 声原创 2020-11-25 23:13:34 · 1969 阅读 · 2 评论 -
模块一、创建程序包
模块一、创建程序包创建一个简单的银行程序包实训目的:Java 语言中面向对象的封装性及构造器的创建和使用。实训说明:在这个练习里,创建一个简单版本的Account 类。将这个源文件放入banking 程序包中。在创建单个账户的默认程序包中,编写了一个测试程序TestBanking。这个测试程序初始化账户余额,并可执行几种简单的事物处理。最后,该测试程序显示该账户的最终余额。提示:1.创建banking 包2.在banking 包下创建Account 类。该类必须实现上述UML 框图中的模型原创 2020-11-25 19:43:17 · 1390 阅读 · 0 评论 -
Java时间相关类
## 时间类原创 2020-07-04 12:10:08 · 261 阅读 · 0 评论 -
Java运算符
Java运算符+,-,*,/,%逻辑运算符 &&,||,!比较运算符 !=,> , >= , < , <= , ==移位运算符 >> , << 等不用记忆运算符优先级,用括号隔开就可以,括号的优先级最高public class OperatorTest { public static void main(String[] args) { int a = 10; int b = 3; int c = a + b;原创 2020-06-30 13:52:34 · 170 阅读 · 0 评论 -
Java基本类型
基本类型/基本型别基本类型类型名boolean布尔byte字节short短整数int整数long长整数float浮点数double双精度浮点数char字符boolean只有true,或者false两种值,默认是falsepublic class BooleanTest { public static void main(String[] args) { boolean a = true;原创 2020-06-30 13:36:18 · 132 阅读 · 0 评论 -
Java类结构和main函数
1.Java类结构Java类文件名 = 类名.javaJava文件必须以.java作为扩展名一个Java文件只能有一个public classpublic class的名字必须和文件名一样,大小写都要完全一致如下 public class名字为HelloWorld,这个class文件名就必须保存为HellWorld.java一个文件可以有多个class,但只能有一个是public。不提倡一个文件里面放多个类(内部类除外)类是Java中最基础的逻辑单位Java 所有内原创 2020-06-26 16:01:37 · 977 阅读 · 0 评论 -
5.Java AIO编程
NIO跳转到NIO-不是真异步,是一个同步的通讯模式举例:假如你去饭店吃饭同步阻塞:当你下完单,你只能等在饭店里面,啥事也不能做,等待厨师完成,并亲自和饭店完成交接。同步非阻塞:你下完单以后,可以外出,不用一直等待。但是会采用定期轮询的方法,随时来看饭菜是否完成。如果已制作完成,也需要亲自和饭店完成交接。异步非阻塞:下完单后,可以外出,也不要定期查看厨师是否做好了(不用定期轮询)。而是交代下来,制作完成后,自动送到家里。(即制作完成后,自动进行一个回调函数执行(自动送达操作))并发编程的同原创 2020-05-24 00:10:31 · 170 阅读 · 0 评论 -
4.Java NIO编程
BIO传统的TCP和UDP通讯:Blocking I/OI/O设备一边在写数据,由于写的速度过慢,另一边读的话必须要等待,出现阻塞,导致性能较差(两边速度不匹配,相差较大就会出现阻塞)。Non-Blocking I/O提供非阻塞通讯等方式避免同步I/O通讯效率过低一个线程管理多个连接减少线程多的压力Non-Blocking I/O,非阻塞I/O,(又名 New I/O)JDK1.4引入,1.7升级NIO 2.0(包括AIO)主要类Buffer 缓存区Channel 通道Sel原创 2020-05-22 12:47:23 · 182 阅读 · 0 评论 -
1.网络编程UDP
端口:0~655350~1023已经被OS(操作系统)占用了,80是Web,23是telnet1024~65535,一般程序可使用(谨防冲突)两台机器通讯就是在IP+Port上进行的在Windows/Linux/Mac上都可以通过netstat -an来查询(netstat -an命令:统计当前这个网卡和外部之间的数据交换的数据netstat=network(网络)+statistics(统计))保留ip:127.01.01本机公网:(万维网/互联网)和内网(局域网)网络是分层的最外层是原创 2020-05-17 13:23:01 · 293 阅读 · 0 评论 -
equals()方法
Java Number类equals() 方法用于判断 Number 对象与方法的参数进是否相等。语法:public boolean equals(Object obj)参数 :obj - 要比较的对象。结果 :如 Number 对象不为 Null,且与方法的参数类型与数值都相等返回 True,否则返回 False。public class equals { public static void main(String[] args) { Integer a=10; I原创 2020-05-15 21:49:44 · 500 阅读 · 0 评论 -
compareTo()方法
compareTo() 方法用于将 Number 对象与方法的参数进行比较。可用于比较 Byte, Long, Integer等。该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较。语法:public int compareTo( NumberSubClass referenceName ) 例如:public int compareTo(Integer anotherInteger)//数字比较两个 Integer对象。参数 (referenceName)可以是一个 By原创 2020-05-15 12:35:15 · 651 阅读 · 0 评论 -
8.6 Exchanger
Exchanger允许在并发线程中相互交换信息允许在2个线程中定义同步点,当两个线程都到达同步点,它们交换数据结构Exchangerexchange(),线程双方互相交互数据交换数据是双向的交换数据1exchanger.exchange(input); //把用户输入传递给线程String item = exchanger.exchange(null);当两个线程都同时执行到同一个exchanger的exchange方法,两个线程就互相交换数据,交换是双向的。交换数据2S原创 2020-05-12 21:28:33 · 100 阅读 · 0 评论 -
8.5 Phaser
Phaser允许执行并发多阶段任务,同步辅助类在每一个阶段结束的位置对线程进行同步,当所有的线程都到达这步,再进行下一步。Phaserarrive()arriveAndAwaitAdvance()示例描述:假设举行考试,总共三道大题,每次下发一道题目,等所有学生完成后再进行下一道import java.util.concurrent.Phaser;public class PhaserExample { /** * 假设举行考试,总共三道大题,每次下发一道题目,等所有学原创 2020-05-12 19:21:05 · 134 阅读 · 0 评论 -
8.4 Barrier
Barrier集合点,也是一个同步辅助类允许多个线程在某一个点上进行同步CyclicBarrier构造函数是需要同步的线程数量await 等待其他线程,到达数量后,就放行示例描述:假定有三行数,用三个线程分别计算每一行的和,最终计算总和import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public class CyclicBarrierEx原创 2020-05-12 19:06:18 · 107 阅读 · 0 评论 -
8.3 Latch类
Latch英文原意,插销等待锁,是一个同步辅助类用来同步执行任务的一个或者多个线程(在某一个地方等待)不是用来保护临界区或者共享资源,是用来协调各个线程,执行到某个地方的时候,大家都暂停一下,大家都到了,在往下执行CountDownLatch(Latch 主要实现类)countDown() 计数减一await() 等待latch 变成 0示例描述:设想百米赛跑比赛 发令枪发出信号后选手开始跑,全部选手跑到终点后比赛结束startSignal.await();startSign原创 2020-05-12 14:02:21 · 185 阅读 · 0 评论 -
8.2 Semaphore
Semaphore信号量:本质上是一个计数器计数器大于0,可以使用,等于0不能使用可以设置多个并发量,例如限制10个访问Semaphoreacquire 获取release 释放比Lock 跟进一步,可以控制多个同时访问关键区示例描述: 现有一地下车库,共有车位5个,有10辆车需要停放,每次停放时,去申请信号量import java.util.concurrent.Semaphore;public class SemaphoreExample { private fin原创 2020-05-12 13:28:31 · 122 阅读 · 0 评论 -
Java并发协作控制(8.1)
线程协作Thread/Executor/Fork-join线程启动,运行,结束线程之间缺少协作synchronized同步限定只有一个线程才能进入关键区简单粗暴,性能损失有点大Lock是synchronized升级版Lock也可以实现同步的效果实现更复杂的临界结构tryLock方法可以预判锁是否空闲允许分离读写的操作,多个读,一个写性能更好...原创 2020-05-12 12:28:27 · 145 阅读 · 0 评论 -
Java并发数据结构(7.2)
Map(映射)Hashtable 同步安全,写多读少HashMap 不安全Collections.synchronizedMap(Map map) 基于synchronized,效率差ConcurrentHashMap 读多写少,非阻塞package map;import java.util.*;import java.util.concurrent.ConcurrentHashMap;public class MapTest{ public static voi原创 2020-05-11 23:08:57 · 249 阅读 · 0 评论 -
Java并发数据结构(7.1)
常用的数据结构是线程不安全的ArrayList,HashMap,HashSet非同步的多个线程同时读写,可能会抛出异常或数据错误传统Vector,Hashtable等同步集合性能过差并发数据结构:添加和删除阻塞式集合:当集合为空或者满时,等待非阻塞式集合:当集合为空或者满时,不等待,返回null或异常List:数据列表类Vector 同步安全,写多读少ArrayList 不安全Collections.synchronizedList(List list)基于synch.原创 2020-05-11 22:52:30 · 133 阅读 · 0 评论 -
并发框架Fork-Join(六)
Java7开始提供的一种并行框架:分解、治理、合并(分治编程)适合于整体任务量不好确定的场合(最小任务可确定)关键类:ForkJoinPool 任务池RecursiveActionRecursiveTask示例:import java.util.concurrent.ExecutionException;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;//分任务求和原创 2020-05-11 20:27:20 · 158 阅读 · 0 评论 -
Java并发框架Executor(五)
一、并行计算业务:任务多,数据量大串行 vs 并行串行编程简单,并行编程难单个计算核频率下降,计算核数增多,整体性能变高并行困难(任务分配和执行过程 高度耦合)如何控制粒度,切割任务如何分配任务给线程,监督线程执行过程并行模式主从模式(Master-Slave):有一个主线程,其余都是从线程。主线程会指挥从线程去工作。Worker模式(Worker to Worker/p2p):所有线程都是平等的,工作内容一样,无中心化的一种模式。从编程的角度来看,主从模式比较原创 2020-05-11 10:03:40 · 115 阅读 · 0 评论 -
java用牛顿迭代法 实现 int sqrt(int x) 函数。
class Solution { int a; public int mySqrt(int x) { a=x; if(x==0) return 0; return((int)sqrt(x)); } public double sqrt(double x){ double s=(x+a/x)/2; if(x==s) return x; else{原创 2020-05-09 23:29:07 · 316 阅读 · 0 评论 -
请分成6个线程,计算m到n的值(以1到100000000为例)的总和。要求每个线程计算的数字量之差不超过1.
代码public class ThreadDemo { public static void main(String[] args) { int m=1; int n=100000000; int quotient=n/6; //商 int remainder=n%6; //余数// System.out.println(quotient);// System.out.println(remainder); TestThread t= new Tes原创 2020-05-09 10:27:04 · 1773 阅读 · 1 评论 -
Java多线程管理(四)
Java生命周期管理线程类粗粒度细粒度: 线程之间有同步操作等待通知/唤醒终止原创 2020-05-03 23:16:21 · 160 阅读 · 0 评论 -
Java多线程信息共享(三)
线程类粗粒度:子线程与子线程之间,和main线程之间缺乏交流细粒度:线程之间有信息交流通讯Java通过共享变量达到信息共享JDK原生库暂时不支持(点对点的)发送信息(类似MPI并行库直接发送消息)通过共享变量在多个线程中共享消息1、static变量(是这个类所有的对象,都共享的一个变量)注:如果一个线程继承线程类继承Thread类,那么该类的信息共享只能通过static变量实现。...原创 2020-04-30 22:05:51 · 179 阅读 · 0 评论 -
Java多线程和并发编程(一/二)
public class ProcessDemo1 { public static void main(String[] args) { while(true) { int a = (int) (Math.random() * 100); System.out.println(" main thread is running " + a); try { Thr...原创 2020-04-29 23:55:49 · 188 阅读 · 0 评论