java 正负数转换(java 正数转负数)
大家好,小编今天为大家分享关于java 正数转负数(java 正负数转换)的信息,很多人还不知道,今天让我们一起来看看吧!
1、Java中有很多内容在开发项目的过程中并不常用,但却是非常重要的部分。为了避免忘记,今天又复习了一遍Java中的重点和难点,借此机会记录下来,以备将来参考。本文主要分为以下几个部分:十进制的转换Java中值算子的解释和应用Java阵列常用排序算法分析Java半搜索法的分析与应用中Java对象的初始化过程Java抽象类在模板 *** 模式中的应用Java多线程的难点及设计多线程程序时应注意的问题Java集框架应用中应注意的问题Java信息产业的难点和亮点分析Java规划的分析与应用正则表达式在Java中的应用及技巧之一部分:十进制之间的转换十进制和二进制之间的转换十进制到二进制:intnum=102;StringBuffer *** =newStringBuffer();while(num>=1){ *** .append(num%2);num=(int)(num/2);}System.out.println( *** .reverse());二进制到十进制:StringbinaryStr="1100110";intnum=0;for(inti=0;i< binarystr.length();="" i++){="" num="" +="Integer.parseInt(String.valueOf(binaryStr.charAt(binaryStr.length()" -="" 1="" -="" i)))="">< i;}system.out.println(num);第二部分:java中中值运算符的解释和应用java中有七个位运算符,分别是&="" lt&="" lt–左移运算符,左移运算所涉及的数字乘以左移位数的2次方,例如3"="" &="" gt="">–右移运算符,右移运算所涉及的数除以右移幂2,例如3>:>2=3/22"&–和运算符。
2、当参与AND运算的两个数的二进制奇偶性为1时,结果值的这一位为1,其余情况为0,如3&2=0011&010=00and运算符and">:>;>运算符组合可以实现十进制转换为十六进制的功能,num&15->num>>>4,这样的一组运算可以得到一个十六进制位,然后通过10+’一’转换成十六进制位"|"–Or运算符,当参与or运算的两个数的二进制等位基因中至少有一个为1时,结果值的位为1,其余为0,例如3|2=0011|0010=001"^"–XOR运算符,XOR运算中涉及的两个数的二进制奇偶性不同则为1,相同则为0,一个数同一个数XOR两次等于原数。其中一个应用是交换两个×××变量的值,而不使用第三个变量。intn=4,m=6;//此时n=n^m的值n=n^m;//此时m=n^m,因为上句代码执行后n=n^m,所以这里m=n^m=n^m^m=n(这里的m=n中的n=4)m=n^m;//此时m=n,n=n^m,所以n=n^m=n^m^n=m(这里的n=m中的m=6)n=n^m;"~"–求逆运算符,所有参与求逆运算的数的二进制位取相反的值,0变成1,1变成0。
3、因为正数的负数或者负数的正数等于它的倒数再加1,所以一个数的倒数等于这个数乘以-1再减">>>–无符号右移,高位补零,类似右移。第三部分:Java数组中常用的排序算法选择排序int[]attr={3,6,5,85,2,44,1,46,67,0,45,4,134,123,112};for(intx=0;x< attr.length()="" -="" 1,="" x++)="" {="" for(int="" y="x" +="" 1;="" y="">< attr.length();="" y++)="" {="">=0;x--){for(inty=0;y< x;y++)="" {="" if(attr[y]="">< attr[y="" +="" 1])="" {="" attr[y]="attr[y]" ^="" attr[y="" +="" 1];="" attr[x]="attr[y]" ^="" attr[y="" +="" 1];="" attr[y]="attr[y]" ^="" attr[y="" +="" 1];="" }="" }}for(int="" i="" in="" attr)="" {="" system.out.print(i="" +="" "="" ");}第四部分:java中半查找方法的分析与应用半搜索的原理是先对数组进行排序(从小到大,如果是从大到小,需要做一些改动),然后找到数组中的中间数,再将中间数与要搜索的数进行比较。如果要搜索的数字小于中间数字,则将最大索引指定为中间结果索引+1,否则将最小索引指定为中间结果-代码如下:int[]="" attr="{3,6,5,85,2,44,1,46,67,0,45,4,134,123,112};int" min="0;int" max="attr.length();int" mid="(int)" (min="" +="" max)="" 2;arrays.sort(attr);int="" key="67;int" keyindex="-1;while(min"><= max)="" {="" if(key="">=>< attr[mid])="" {="" max="mid" +="" 1;="" }="" else="" if(key="">attr[mid]){min=mid-1;}else{keyIndex=mid;break;}mid=(int)(min+max)/2;}if(keyIndex!=-1){System.out.println(attr[mid]);}第五部分:Java中对象的初始化过程初始化静态代码块初始化属性默认值初始化属性显示设置值初始化构造代码块初始化构造函数第六部分:Java抽象类在模板 *** 模式中的应用这里有一个简单的示例代码来说明。
4、代码如下://首先声明一个抽象类,这个抽象类的作用是计算一段代码的执行时间publicabstractclassGetTime{publicfinalvoidgetDoWorkTime(){intstart=System.currentTimeMillis();doWork();intend=System.currentTimeMillis();System.out.println("工作时间:"+(start-end));}publicabstractvoiddoWork();}//声明一个GetTime类的子类,并实现doWork *** publicclassSubGetTimeextendsGetTime{@OverridepublicvoiddoWork(){System.out.println("做一些工作");}}publicclassTest{publicstaticvoidmain(String[]args){SubGetTimegetTime=newSubGetTime();getTime.getDoWorkTime();}}//这里的doWork *** 声明为抽象 *** ,然后交给子类去实现需要做的工作,这种方式就是模板 *** 模式,这是设计模式中行为模式中的一种第七部分:Java多线程的难点及设计多线程程序时需要注意的问题Java多线程的难点和重点主要是线程安全的问题。在这里,我将主要谈谈线程安全的问题。因为在JDK5之后,Java引入了Lock和Condition来代替synchronized、wait和notify,所以分两种情况来讨论。
5、首先,Java中创建线程有两种方式。之一种 *** 是继承Thread类,然后重写run *** 。第二种 *** 是实现runable接口和Run *** 。
6、继承线程:publicclassSaveMoneyextendsThread{@Overridepublicvoidrun(){System.out.println("存钱");}}publicclassGetMoneyextendsThread{@Overridepublicvoidrun(){System.out.println("取钱");}}publicclassBankTest{publicstaticvoidmain(String[]args){SaveMoneysaveMoneyThread=newSaveMoney();GetMoneygetMoneyThread=newGetMoney();saveMoneyThread.start();//启动线程,这里如果调用run是执行run *** 不是启动线程,需要注意getMoneyThread.start();}}实现可运行的接口:publicclassSaveMoneyimplementsRunable{publicvoidrun(){System.out.println("存钱");}}publicclassGetMoneyimplementsRunable{publicvoidrun(){System.out.println("取钱");}}publicclassBankTest{publicstaticvoidmain(String[]args){newThread(newSaveMoney()).start();//启动线程,这里如果调用run是执行run *** 不是启动线程,需要注意newThread(newGetMoney()).start();}}这里以银行存取款为例,说明JDK5之前和JDK5之后的线程同步问题。JDK5之前://首先创建一个用户帐户类publicclassBankAccont{privateStringaccontName="";privateDoubletotalMoney=0d;publicBankAccont(StringaccontName,DoubleinitMoney){this.accontName=accontName;this.totalMoney=initMoney;}publicvoidsaveMoney(Doublemoney){this.totalMoney+=money;System.out.println("存了"+money+"块钱");}publicvoidgetMoney(Doublemoney){this.totalMoney-=money;System.out.println("取了"+money+"块钱");}publicStringtoString(){System.out.println(this.accontName+"总共还有"+this.totalMoney+"元人民币");}}//分别创建存钱和取钱的线程,使用实现Runable接口的方式这种方式可以轻松的让不同的线程执行相同的任务,除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类publicclassSavaMoneyimplementsRunable{privateBankAccontaccont=null;publicSaveMoney(BankAccontaccont){this.accont=accont;}publicvoidrun(){//这里使用同一个锁进行同步synchronized(BankAccont.class){while(true){this.accont.saveMoney(100);}}}}publicclassGetMoneyimplementsRunable{privateBankAccontaccont=null;publicGetMoney(BankAccontaccont){this.accont=accont;}publicvoidrun(){//这里使用同一个锁进行同步synchronized(BankAccont.class){while(true){this.accont.getMoney(100);}}}}publicclassBankTest{publicstaticvoidmain(String[]args){BankAccontaccont=newBankAccont("张三",1000);newThread(newSaveMoney(accont)).start();newThread(newGetMoney(accont)).start();accont.toString();}}JDK5之后://首先创建一个用户帐户类publicclassBankAccont{privateStringaccontName="";privateDoubletotalMoney=0d;privatefinalLocklock=newRentrantLock();privatefinalConditioncondition_save=lock.newCondition();privatefinalConditioncondition_get=lock.newCondition();publicBankAccont(StringaccontName,DoubleinitMoney){this.accontName=accontName;this.totalMoney=initMoney;}publicvoidsaveMoney(Doublemoney){lock.lock();condition_get.await();//这里引用不合适,只是一个示例this.totalMoney+=money;System.out.println("存了"+money+"块钱");condition_get.signal();//这里引用不合适,只是一个示例lock.unlock();}publicvoidgetMoney(Doublemoney){lock.lock();condition_save.await();//这里引用不合适,只是一个示例this.totalMoney-=money;System.out.println("取了"+money+"块钱");condition_save.signal();//这里引用不合适,只是一个示例lock.unlock();}publicStringtoString(){System.out.println(this.accontName+"总共还有"+this.totalMoney+"元人民币");}}//分别创建存钱和取钱的线程,使用实现Runable接口的方式这种方式可以轻松的让不同的线程执行相同的任务,除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类publicclassSavaMoneyimplementsRunable{privateBankAccontaccont=null;publicSaveMoney(BankAccontaccont){this.accont=accont;}publicvoidrun(){while(true){this.accont.saveMoney(100);}}}publicclassGetMoneyimplementsRunable{privateBankAccontaccont=null;publicGetMoney(BankAccontaccont){this.accont=accont;}publicvoidrun(){while(true){this.accont.getMoney(100);}}}publicclassBankTest{publicstaticvoidmain(String[]args){BankAccontaccont=newBankAccont("张三",1000);newThread(newSaveMoney(accont)).start();newThread(newGetMoney(accont)).start();accont.toString();}}以上只是一个简单的例子,需要根据需要修改。在设计多线程程序时,我们需要更加关注线程同步(线程安全)的问题。
7、在多线程中,还有一个问题,Java中有哪些线程安全集?在Java中,线程安全集有Vector(vector,现在已经不常用了)、HashTable和Enumeration(枚举)。除了这些,其余都是线程不安全的 *** 。StringBuffer和stringbuilder的区别在于,StringBuffer是线程安全的,stringbuilder是线程不安全的。
8、Java多线程相关问题,暂时只想到这些,想到了再补充。
本文关于java 正数转负数(java 正负数转换)的知识就到此分享完毕,希望对大家有所帮助。
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 203304862@qq.com
本文链接:https://jinnalai.com/n/186191.html