发表于: 2018-03-03 23:21:36

2 672


今天完成的事情:

还是继续基础知识的学习

1.构造方法

a.作用:在创建对象时,就给对象进行赋值,而不用在创建完之后给对象变量一个个进行赋值。

b.分为有参构造方法和无参构造方法。

  有参构造方法定义语法:[修饰符] 类名(形参类型1 形参名,...){赋值语句};

  无参构造方法定义语法:[修饰符] 类名(){赋值语句(一般无)};

c.方法名与类名相同。

d.构造方法没有返回值,也没有返回值类型,但是方法体最后可以加return,起到一个终止方法体的作用,但是不会返回具体值。

e.在没有显示定义构造方法之前,系统有一个默认的无参构造方法,当程序员显示定义了构造方法之后,系统默认的无参构造就没有了,此时若还想按原来的一个一个进行赋值,需要再创建一个无参构造方法。

f.上述再创建就是利用的构造方法可以利用参数实现重载的特点,即可以定义多种参数数量不同的同一构造方法,系统在调用时会自动匹配最适合的使用。

g.构造方法在创建对象是,跟在new运算符后,由系统调用,如 Scanner sc=new  Scanner(System.in);后一个Scanner(System.in)即为一个构造方法,注意其不能通过对象来调用。

h.在无参构造方法的方法体第一句可以使用this调用有参构造方法。同理,少参可以用this调用多参。

2.this关键字

a.当在方法中,方法的形参或局部变量与字段名相同时,在方法体中默认采用就近原则,使用的是局部变量或者形参,而不是字段,在方法中,可以通过this关键字来访问字段

b.this是指当前对象,如果是在构造方法中使用this,那么就是值刚刚在堆中new出来的那个对象;在普通的实例方法中,this当前对象则是指调用此方法的对象。

c.当一个类中需要定义多个构造方法时,可以定义一个有最多参数的构造方法,然后其他的构造方法就可以使用this关键字来调用这个最多构造参数的构造方法。此时,this()这条语句必须放在构造语句的最前面作为第一天语句。

d.举例,

public class Person{                                        //创建一个Person 类

       String name;                                            //创建成员变量name,gender,age

       String gender;

       int      age;

public Person(String name,String gender,int age){                    //创建一个有参构造方法,将所有属性都包括

      this.name=name;                                                                 //由于形参名和成员变量名重名,所以使用this 来区分

      this.gender=gender;

      this.age=age;

}

public Person(String name){                                                    //之前定义了一个包含所有属性的构造方法,所以此时要重载只有一个name属性时,可以利用this调用构造方法

     this(name,"",0);                                                                  //没有定义的属性就按照系统默认赋值给予其初始变量,按此方法可以减少代码的录入

}

}

3.静态变量

a.静态变量是使用static 修饰的成员变量,其作用是为了让所有使用此变量名的变量共享同一储存空间,即在静态变量的作用域内,即使存在同名的局部变量,其储存的数据是共用的,而不像未声明的情况下,在局部方法中是优先使用局部变量的。

b.java中规定不能将方法体中的变量声明为静态变量,所以只有在类中方法体外可以声明某变量为静态变量,即只有成员变量可以成为静态变量。

c.其在调用时一般使用 “  类名.静态变量名 ” 的形式进行调用,区别与一般非静态变量字节使用变量名就可进行调用,主要是因为当其声明为public时,是可以跨类调用的,虽然也可以使用“对象名.静态变量名”进行调用,但是一般不建议,以防弄混,而且不能体现出静态变量可以跨类的特点。

d.实例对象在创建对象时在堆中创建,实例对象被垃圾回收器收走后,实例变量就释放了,而静态变量在程序加载时就在方法区中分配存储空间,知道程序结束才释放。

e.两个例子说明静态变量共用同一块储存空间

例1:public class TransferProperty {

    int i =47;                                                                 //实例变量,初始赋值为47

    public void call() {                                                  //创建一个call方法

    System.out.println("调用call方法");

    for(i=0;i<3;i++) {                                      //创建一个循环,其中局部变量i与成员变量重名(注意,此时局部变量i和成员变量i其实是使用同一地址)

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

    if(i==2) {

    System.out.println("\n");                                       //此方法打印0 1 2后换行

        }

    }

}

    public  TransferProperty() {                                 //创建一个构造方法,可用来创建新的TP类对象

}

   public static void main(String[] args) {

   TransferProperty t1=new TransferProperty();                //创建新对象t1

   TransferProperty t2=new TransferProperty();               //创建新对象t2

   t2.i=60;                                                                          //赋值t2中的i变量为60

   System.out.println("第一个实例对象调用变量i的结果是:"+t1.i);                    //输出此时t1中i的值,因为未赋值,所以时系统初始赋值47

   t1.call();                                                                                                         //调用call方法,打印出0 1 2

   System.out.println("第二个实例对象调用变量i的结果是:"+t2.i);                   //输出t2中i的值,上面重新对t2.i进行了赋值,所以输出60

   t2.call();                                                                                                         //调用call方法,打印出0 1 2

    }

}

从此例可以看出,不同的实例变量是储存在不同内存中,即实例变量是属于具体对象的,局部变量虽然重名,也是储存在另外一个内存中


例2:public class AccessProperty{

     static int i =47;                                                       //创建一个静态成员变量,初始赋值为47

    public void call() {                                                  //创建一个call方法

    System.out.println("调用call方法");

    for(i=0;i<3;i++) {                                                   //创建一个循环,其中局部变量i与成员变量重名

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

    if(i==2) {

    System.out.println("\n");                                       //此方法打印0 1 2后换行

        }

    }

}

    public  AccessProperty() {                                 //创建一个构造方法,可用来创建新的AP类对象          

}

   public static void main(String[] args) {

   AccessProperty t1=new AccessProperty();                   //创建新对象t1

   AccessProperty t2=new AccessProperty();                   //创建新对象t2

   t2.i=60;                                                                          //赋值t2中的i变量为60

   System.out.println("第一个实例对象调用变量i的结果是:"+t1.i);                    /*输出此时t1中i的值,因为整个类中i全部共用一个地址,最近i的变化是                                                                                                                                                                                对t2.i的赋值60,所以打印结果是60,而不是例1中的47*/

   t1.call();                                                                                                         //调用call方法,打印出0 1 2

   System.out.println("第二个实例对象调用变量i的结果是:"+t2.i);                   /*输出t2中i的值,上面虽然重新对t2.i进行了赋值,但是最近的t1调用的                                                                                                                                                                                   call方法中,i的值实际上已经变为了3,所以此时输出值为3*/     

   t2.call();                                                                                                         //调用call方法,打印出0 1 2

    }

}

从此例可以看出,由于加了static修饰,所以即使不同的对象,其变量i的值依然是使用同一储存空间,而且方法中的同名局部变量也是使用同一空间,正是体现出了静态变量共享数据的特点,其为整个类所共享
4.包装类

a.由于Java中基本类型功能简单不具备对象的特性,所以为了使其具备对象的特性就出现了包装类,其与基本数据类型一一对应就可以像操作对象一样操作基本类型了。

b.包装类主要有两种方法,一种是本类型和其他类型之间的转换,另一种是字符串和本类型以及其他类型之间的转换。

c.包装类和基本类型之间的转换需要进行装箱和拆箱,装箱是指将基本类型转换成包装类,分为自动装箱和手动装箱而拆箱则是值将包装类转换成基本类型,也分为自动装箱和手动装箱,在jdk1.5版本后,系统引入了自动拆装箱。

d.字符串和本类型以及基本类型的转换分为两类,一类是基本类型转换到字符串,包括三种方法:包装类的toString()方法;String类的valueOf()方法;空字符串加一个基本类型变量(最常用)。字符串转换到基本类型有两种方法:包装类的parse*()方法;包装类的valueOf()方法。

5.数字处理类是专门为解决数字问题而设计的类,一些简单的数学问题都可以通过数字处理类来解决,主要包括DecimalFormat类(用于格式化数字)、Math类(为各种数学计算提供工具方法)、Random类(为java处理随机问题提供了各种方法)、BigInteger类与BigDecimal类(为所有大数字的处理提供了相应的数学运算操作方法)。


明天计划的事情:

 继续啃基础部分,先把基础打好再去做任务,老大划重点的地方重点看,其他不太重要的略看
遇到的问题:

要看要记要理解的东西太多了,感觉越学发现自己不会的越多
收获:

对构造方法,this关键字,静态变量有了一个深入的了解,粗略了解了包装类和数字处理类


返回列表 返回列表
评论

    分享到