黑马基础班学习笔记

来源:互联网 发布:qq文件恢复软件 编辑:程序博客网 时间:2024/05/16 08:10
int n=3,m=8;

1)         通过第三方变量:

  int  temp=0;  temp=n;  n=m;  m=temp;

2)   不借助第三方:

      a.

      n=m+n;   //n=3+8=11,m=3      m=n-m;   //m=11-3=8
       b.     ^:异或符号.  m^n^n=m

n=n^m;m=n^m;   //m=(n^m)^m=nn=n^m;    //n=(n^m)^n
二、不同进制之间进行转化
       查表法:
1) 十进制转化为十六进制
public static void toHex(int num)
{
/*
* 0 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F =========十六进制的元素
* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
* 查表法:将所有元素临时储存起来,建立对应关系。
* 每一次&15后的值作为索引去查建立好的表。就可以找对应的元素
* */
char[] chs={'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};

//定义一个临时容器
char[] arr=new char[8];
int pos=arr.length;//指针指向arr最后一个位置的后一个位置
while (num!=0)
{
int temp=num&15;
arr[--pos]=chs[temp];//在arr中倒着存储
num=num >>> 4;//num向右无符号移动四位
}

for(int x=pos;x<arr.length;x++)
{
System.out.print(arr[x]+",");
}
}
2) 十进制转化为二进制
public static void toBin(int num)
{
//建立二进制表

char[] chs ={'0','1'};
//定义一个临时存储容器
char[] arr=new char[32];
//定义一个指针位置,指向arr最后的空间的后一个位置
int pos=arr.length;
while (num!=0)
{
int temp=num&1;
arr[--pos]=chs[temp];
num=num>>>1;
}
for(int x=pos;x<arr.length;x++)
{
System.out.print(arr[x]);
}
}
三、模板方法设计模式
    在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,就将不确定的部分暴露出去,由该类的子类去完成。
 四、异常处理  
1)概述
      异常:就是程序运行时出现的不正常情况
        异常由来:问题也是现实生活中一个具体的食物,也可以通过java的类的形式进行描述,并封装对象。其实就是java对不正常情况进行描述后的对象体现。
         对于问题的划分:两种,一种是严重的问题,一种是非严重的问题。
         对于严重的,java通过Error类进行描述。
             对于Error一般不写针对性的代码对其进行处理。
         对于非严重的,java通过Exception类进行描述。
             对于Exception可以使用针对性的处理方式进行处理。
2)异常处理:
 Java 提供了特有的语句进行处理。
try
{
     需要被检测的代码
}
catch(异常类 变量)
{
     处理异常的代码:(处理方式)
}
finally
{
     一定会执行的语句。
注意:
1、 finally中定义的通常是 关闭资源代码。因为资源必须释放。
2、 finally只是一种情况不会执行,当执行到System.exit(0);fianally不会执行。
}
在函数上声明异常,便于提高安全性。调用者必须处理异常,否则程序出错(网上查阅如何在函数上声明异常)
对多异常的处理:
1、 声明异常时,建议声明更为具体的异常。这样可以处理的给更具体。
2、 对方声明几个异常,就对应有几个catch块,不要定义多余的catch块如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。   
3) 自定义异常:
自定义异常:
按照java的面向对象思想,将程序中出现的特有问题进行封装。
异常的好处:
1、 将问题进行封装
2、 将正常流程代码和问题处理代码相分离,方便于阅读。
异常的处理原则:
1、 处理方式有两种:try或者throws
2、 调用到抛出异常的功能时,抛出几个,就处理几个。一个try对应多个catch
3、 多个catch,父类的catch放在最下面
4、 Catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace或输出语句。也不要不写。当捕获到异常,本功能处理不了时,可以继续在catch中抛出。
try{
throw new Exception();
}catch(Exception e){
throw e;
}
如果该异常处理不了,但是并属于该功能出现的异常。可以将异常转化后,再抛出和该功能相关的异常。
try{
throw new AException();
}catch(AException e){
throw new Bexception();
}


或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获异常处理后,转化新的异常。
try{
throw new AException();
}catch(AException e){
//对AException先处理。
throw new Bexception();
}


定义类继承Exception或者RuntimeException
1、 为了让自定义类具备可抛性。
2、 让该类具备操作异常的共性方法。
当在函数内部出现了throw抛出异常对象,那么就必须要给出对应的处理动作。
要么在内部try catch处理。
要么在函数上声明让调用者处理。


因为父类中已经把异常信息的操作已经完成。所以子类只要在构造时,将异常信息通过super语句传递给父类。那么就可以直接通过getMessage方法获取自定义的异常信息。
class MyException extends Exception
{
     MyException(String message)
{
    Super(message);
}
}


Exception中有一个特殊的子类异常RuntimeException。如果在函数内部抛出该异常,函数上可以不用声明,编译一样通过。如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止,因为在运行时,出现了无法运算的情况,希望停止程序后,对代码进行修改。
自定义异常时,如果该异常的发生,无法再继续进行运算 ,就让 自定义异常继承RuntimeException 
  对于异常分两种:
1、 编译时被检测的异常。
2、 编译时不被检测的异常(运行时异常,RuntimeException及其子类)。
异常在子父类覆盖中的体现:
1、 子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类,或者不抛出异常。
2、 如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3、 如果父类或者接口 方法中,没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生异常,就必须要进行try处理,绝对不能抛出 。


0 0