java 一些基础杂烩(随笔)

1. 关于abstract 抽象类:

         abstract 定义抽象方法, abstract public void  s(); 不能加{} 注意!!!!!!!!

           有抽样方法的类,叫抽样类,当你定义一个类继承 有抽样方法的类时,要实现覆盖抽样方法。

            注意 在类上 加abstract 如: public abstract class demo4    类中可以有abstract 修饰的方法,也可以没有。

                       但是 类中可以有abstract 修饰的方法,在类上必须加abstract

          对于修饰class 时(java里的类   private 可以修饰class。
               前提是这个class 为 内部类。否则只能是public,不然会报错)



2.关于重载与重写:

       重写:重写(覆盖)的规则:
          1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
          2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
          3、重写的方法的返回值必须和被重写的方法的返回一致;
          4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
          5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

          6、静态方法不能被重写为非静态的方法(会编译出错)。

                   简单来说就是重写是在继承父类是,重写父类的方法,要求参数,返回值,与函数名一样
                     被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写

 
      重载: 一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
       重载的规则:
              1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参                        数,不同的参数顺序(参数类型必须不一样);
            2、不能通过访问权限、返回类型、抛出的异常进行重载;
            3、方法的异常类型和数目不会对重载造成影响;

                      简单来说就是,我在外面new 这个对象时,调用方法能找到唯一的方法,即是我可以  . 出唯一的方法


3.java里的类   只能继承一个类,而可以实现多个接口。

       原因:
    不允许继承多类,就是为了避免继承多父类,在调用相同方法或者构造函数时赋值同一个成员变量时,凌乱了。
    接口没有变量,则没有以上的矛盾。

       

4.关于精度转换的问题


默认的浮点数都是double 只有在数组后边加上f才是 float的
float f=12.2f;
这是定义一个float类型的数据

        按小到大排序(精度排序小到大),除了boolean

       byte  char short  int  long float double   boolean(false|true)

    低精度到高精度不用强转.自动转,
        float m;
        int s=6;
        m=s;
        System.out.println(m);     输出6.0

    高精度到低精度要强转(会造成精度丢失)

    double m=6.186;
        
        int s=(int) m;
        
        System.out.println(s);  输出6

       



5.关于  switch 里面的break 加与不加的问题。 

     nt sd=2;

    switch (sd) {                                                                         
        case 2 :  System.out.println("2");
        case 5:
            System.out.println("5");
            
        case 1:
            System.out.println("1");

   }    输出 2 5 1  因为都没加break



nt sd=2;

    switch (sd) {                                                                         
        case 2 :  System.out.println("2") break;
        case 5:
            System.out.println("5");
            
        case 1:
            System.out.println("1");

   }    输出  2  在2 后面加了break



nt sd=5;

    switch (sd) {                                                                         
        case 2 :  System.out.println("2") break;
        case 5:
            System.out.println("5");
            
        case 1:
            System.out.println("1");

      default:

         System.out.println("都找不到的时候走这个");

   }    输出  5 1   在5出没加break


   总结:switch语句  是在找到对应值之前 ,管他有没有加break 都不会执行。当在找到对应值后,看该语句有没有break,有的话就 跳出(相当于跳出循环),如果没有的话,就按顺序执行下面的语句,碰到有break的话,就跳出。



6.关于异常

1、类java.lang.Throwable是所有异常类的基类,它包括两个子类:Exception和Error,Exception类用于描述程序能够捕获的异 常    如ClassNotFoundException。Error类用于指示合理的应用程序不应该试图捕获的严重问题,如虚拟机错误VirtualMachineError      

 2、自定义异常类可以继承Throwable类或者Exception,而不要继承Error类。自定义异常类之间也可以有继承关系
    3、需要为自定义异常类设计构造方法,以方便构造自定义异常对象。






7.关于判断对象
   1.判断两个对象是否是同一个引用对象则用==,"=="比的是地址.因为如果地址相同,则就是同一个对象
   2.obj1.equals(Object obj2),用来判断两个对象是否相等(前面给出的是相等的情况。如果你要不相等的话:!obj1.equals(Object obj2)就OK了)









8.关于值传递与引用传递(重要)
对于像char,int,String,Integer,等基本类型都是值传递
一般像 对象传递到方法都是属于引用传递(除了像new String(),new Integer()等都是值传递)
还有数组比较奇特,是存放在堆空间里面的,数组传递到方法都是 引用传递。如String[],int[],char[]

    等都是引用传递

例子:

2

public static void main(String[] args) {  
          char ch = 'a';  
           String[] m=new String[]{"limian","douyu"};
          changechar(ch);
          changeString(m);
          System.out.println(ch);
          System.out.println(m[0]+m[1]);
       }  
      public static void changechar(  char ch){  
          
         ch= 'g';
      }  
      
      public static void changeString(String[] s){  
          
           s[0]="limiange";

      }


输出   a
limiangedouyu





9.关于接口(可以定义方法与属性,属性必须赋值是final的)

1:接口没有提供构造方法   

2:接口中的方法默认使用publicabstract修饰
3接口中的属性默认使用publicstaticfinal修饰   (属性子类不能修改)

 



10.关于父类中的static 修饰的方法问题

   

首先要强调,静态方法是不能被覆盖的。


原因:
在子类中,可以定义与父类同名的静态方法,不过并不存在“多态”,严格的说,方法间没有多态就不能称作“覆盖”。所以说,子类的静态方法,并没有覆盖父类的方法。


[java]   view plain  copy
  1. package com.ren.staticTest;  
  2.   
  3. public class StaticExtends {  
  4.   
  5.     public static void main(String[] args) {  
  6.         Father son = new Son(); //声明为Father类,son1静态方法和Father类绑定  
  7.         son.method();  
  8.         son.staticMethod();   
  9.           
  10.         Son son2 = new Son();  
  11.         son2.method();  
  12.         son2.staticMethod();  
  13.     }  
  14. }  
  15.   
  16. class Father{  
  17.       
  18.     void method(){  
  19.         System.out.println("父类方法");  
  20.     }  
  21.       
  22.     static void staticMethod(){  
  23.         System.out.println("父类静态方法");  
  24.     }  
  25. }  
  26.   
  27. class Son extends Father{  
  28.       
  29.     void method(){  
  30.         System.out.println("子类方法");  
  31.     }  
  32.       
  33.     static void staticMethod(){  
  34.         System.out.println("子类静态方法");  
  35.     }  
  36. }  


运行结果:

子类方法
父类静态方法
子类方法
子类静态方法

       





11.关于数组,map,list 赋值与初始化赋值。

                int [2] b;    会报错。

             int [] b;     不报错

             数组不new的时候不能写数组的大小

             数组new 的时候要指明大小   ,不然报错

                               int [] b=new int[6];  但是当直接赋值的时候不能加数组大小,会报错。

 多元数组,要说明第一个的大小

           int [][]b=new int[3][];


           int [] a={1,3,5,7,2,4};    赋值

            或  int [] b=new int[]{1,3,5,7,2,4};    不报错

            int [] b=new int[5]{1,3,5,7,2,4};     报错

总结:

声明数组时不能指定其长度(数组中元素的个数),

Java中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]


 

         list  与map的赋值不同与数组

List<String> nList=new ArrayList<String>(){{add("str01"); add("str02");}};
        
        Map<String,String> m=new HashMap<String, String>(){{put("limian", "douyu"); put("1", "1w");}};

   


12.关于final类,(final 修饰的对象引用不能变,但是内容可以变)

   

    使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
 final StringBuffer a=new StringBuffer("immutable");执行如下语句将报告编译期错误:
 a=new StringBuffer("");但是,执行如下语句则可以通过编译:
 a.append(" broken!"); 

如:public static void main(String[] args) {
        
        int x=0;
        final int y=1;
        int[] z={2};
        final int [] n={3};
        n[0]++;
         
        User(x,y,z,n);
         System.err.println(z[0]);
         System.err.println(n[0]);
         System.err.println(x);
         System.err.println(y);
         
    }

    private static void User(final int x, int y, final int[] z, int[] n) {
        x++;(报错)
        y++;
        y=x;
        z[0]++;
        n[0]++;
        z=n;(报错)
         
    }



13.关于在方法里面定义变量

       在方法里面   不能用修饰符  修饰变量 ,如果硬要使用  只能使用 final 定义变量并且赋值才可以。

    void   f(){

        final  int  a=2;(可以通过)

        public int  a=2;(报错,编译通不过)

         int a=2;     (可以通过)

}

       或者不用修饰符修饰, 直接   int a

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值