Thinking in java个人笔记1

Thinking in java个人总结

  根据规范,java类的首字母大写,方法的首字母小写,命名按照驼峰规则来

  构造器(系统会自动创建一个无参构造,若已经写了(有参,无参)系统就不会创建了),方法重载,

  java方法重载不考虑使用返回值来判别的原因:可能会只顾使用方法而忽略其返回值,如f()

  关键字this只能用于方法内部,表示对当前对象的引用,如果想在当前方法中调用其他方法则无需this

  java中的基本数据类型能从一个“较小”的类型自动提升到一个“较大”的类型(byte<short<char<int<long<float<double)

  Java.util.random->Random(10)后面的种子数->当种子数相同时,产生的随机数(ran.nextInt()或nextDouble()等)将会固定,所以如果没有特殊要求就不需要固定种子数。Java.lang.Math.Random->Math.Random产生0~1之间不包括1的double类型

  关系比较,==和!=比较的是两个对象的引用,比较两个对象内容用equals(),基本数据类型直接使用==或!=就行

  科学计数,float a=1.39e-2f;->1.39X10-2次

  位运算:&(按位与->两个1=1);|按位或; ^按位异或(不同取1);!取反;<<左移(低位加0)>>右移(若为正则在高位加0,若为负则在高位加1) >>>无符号右移(无论正负都加0) >>=或>>>=移动完后赋值给左边变量

  java在进行高类型转低类型时会进行截尾操作(float->int 3.4->3)若想进行四舍五入操作则使用java.lang.Math->round()方法

  foreach+range():for(inti:range(10))==for(int i=0;i<10;i++)

扫描二维码关注公众号,回复: 2844236 查看本文章

  java中没有goto,但是可以用continue/break 标签(如a)来跳转到a  a:System.out.print(“a”)

  java进行初始化操作时,先初始化静态变量(只初始化一次)->静态变量不同于final,他是可以改变的,再初始化非静态变量

  默认方法toString()打印出类名和地址

  可变参数:a(Object…args)/a(int j,String…a)不确定类型和个数/不确定个数

enum枚举类型:publicenumcolor{

    red(1),black(4),blue(7);

      privateinta;

      privatecolor(intin){

            this.a=in;

      }

      publicintgetColor(){

            returnthis.a;

      }

}publicvoidtest(){

         for(colora:color.values()){

              System.out.println(a+"-->"+a.getColor());

         }

Ø 继承了enum,可覆盖的方法(ordinal-枚举值在枚举类型中的顺序,compareTo-两个枚举值比较顺序,values-包含全部枚举值的数组,toString枚举常量名称,valueOf-指定枚举值的枚举常量,equals-比较是否是同一个引用)

Ø 如果不提供任何访问权限修饰词,则默认是“包访问权限”

Ø 默认包:处于相同的路径之中且没有给自己设置包名,处于默认包中的类可以相互访问

Ø 封装:把数据和方法包装进类中,以及具体实现的隐藏

Ø 一个编译单元只能有一个public类,外部类(顶级类)只能用public/default修饰,内部类可以用static,public,default,protected,private修饰

Ø 内部类编译之后就会形成独立的class,因此内部类变量/方法可以和外部类相同,外部类可以直接访问,内部类不能含有static(因为成员内部类先要先创建外部类才能创建自己,而static是优先创建的)

Ø   public class Outer { 

Ø       public static void main(String[] args) { 

Ø           Outer outer = new Outer(); 

Ø           Outer.Inner inner = outer.new Inner(); 

Ø           inner.print("Outer.new"); 

Ø    

Ø           inner = outer.getInner(); 

Ø           inner.print("Outer.get"); 

Ø       } 

Ø    

Ø       // 个人推荐使用getxxx()取成内部,尤其是内部的构造函数无参数 

Ø       public Inner getInner() { 

Ø           return new Inner(); 

Ø       } 

Ø    

Ø       public class Inner { 

Ø           public void print(String str) { 

Ø               System.out.println(str); 

Ø           } 

Ø       } 

Ø  

Ø 在内部类使用外部类:outer.this

Ø 局部内部类:在外部类的函数中定义一个类

Ø  嵌套内部类:嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。嵌套类和普通的内部类还有一个区别:普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用。

u  匿名内部类:只使用一次,且必须继承一个父类或者实现一个接口且两者不可兼得,不能定义构造函数,不能存在任何静态变量或方法,匿名内部类不能抽象,形参必须为final,初始化采用

Ø  继承父类

Ø  abstract class Person {

Ø      public abstract void eat();

Ø  }

Ø   

Ø  public class Demo {

Ø      public static void main(String[]args) {

Ø          Personp = new Person() {

Ø              public void eat() {

Ø                  System.out.println("eatsomething");

Ø              }

Ø          };

Ø          p.eat();

Ø      }

Ø  }

实现接口

Ø  interface Person {

Ø      public void eat();

Ø  }

Ø   

Ø  public class Demo {

Ø      public static void main(String[]args) {

Ø          Personp = new Person() {

Ø              public void eat() {

Ø                  System.out.println("eatsomething");

Ø              }

Ø          };

Ø          p.eat();

Ø      }

Ø  }

Ø  thread匿名内部类实现

Ø  public class Demo {

Ø      public static void main(String[]args) {

Ø          Threadt = new Thread() {

Ø              public void run() {

Ø                  for (int i = 1; i <=5; i++) {

Ø                      System.out.print(i+ " ");

Ø                  }

Ø              }

Ø          };

Ø          t.start();

Ø      }

Ø  }

Ø  每一个非基本类型的对象都有一个toString方法,当编译器需要一个String而你只有一个对象时就会调用toString方法,toString方法需要自己编写(返回某个属性)

Ø  在继承中,父类如果没有默认构造器只有有参构造启,子类想要调用父类的有参构造器就要使用super(i);i是参数,super.xxx()调用父类的某个方法,在finally中要记得释放资源

Ø  子类引入新的重载方法,并不会屏蔽父类的方法

Ø  组合:在新类中嵌入某个类,让其实现所需要的功能

Ø  继承:。。

Ø  代理:

Ø  protected提供了子类的访问权限以及包内的访问权限。

Ø  向上转型:新类是现有类的一种类型,可以用新类来替代父类,就像是研究生必定有本科生的技能一样,在一个方法中的参数要求传入父类-》可以用子类来替代

Ø  final:基本数据(数值不变)static final会占据一段不能改变的存储空间(编译期常量),对于对象(引用不变,对象本身是可以改变的)

Ø  空白final:在类中使用,必须在构造器中用表达式对final进行赋值操作

Ø  final参数,用于函数中,无法对其进行修改

Ø  final方法:(1)防止继承过程中对方法进行覆盖,保持方法不变;(2)保证效率

Ø  类中的private方法都隐式的指定为final,对private增加final并没有增加额外的意义

Ø  final类不能被继承,也不能做任何改变

猜你喜欢

转载自blog.csdn.net/Alpha_Paser/article/details/74332611