关闭

java学习笔记(三)----成员权限,构造函数,this用法

1949人阅读 评论(0) 收藏 举报

成员权限
        
               本类    同包类    非同包子类    非同包非子类

public         y        y               y                        y

protected    y        y               y

default        y        y

private        y


在类中定义的变量,在创建对象时,会自动对类中的变量进行初使化,对如int类的会被初使化为0。
在方法中定义的变量,不会被初使化。

peason p1=new peason p1();
peason p2=p1;
p1=null;
此时p1为空,变为垃圾,peason对象还被p2所引用.

==和equals的区别:==用于比较两个变量的值是否相等(用于基本数据类型,equals用于比两个对象中的内容是否完全一样)
对于String s1=new String("abc"); 和 String s2=new String("abc");这两条语句,用if (s1==s2) , s1和s2是不等的,因为s1和s2是两个对象,所以不等; 但String s3=s1;
用if (s1==s3),则结果是相等的,因为s1和s3指向堆中的同一个对象,他们在栈中的值是一样的。
equals用于比较两个对象中的内容是否相等,if (s1.equals(s2)) ,则结果相等


数组间的考备函数 System.arraycopy()
数组间的排序 arrays.sort()
数组的比较也可用equals()

 

--------------------------------
***********匿名对象
可以 new 类名().方法名(); new peason().shout();直接创建一个对象,调用方法.(匿名对象)
匿名对象的两种情况:1.如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
2.将匿名对象作为实参传递给一个函数调用,比如程序中有一个getSomeOne函数,要接收一个Person类对象作为参数,函数定义如下;
public static void getSomeone(Person p)
{.......}
可以用下面的语句调用这个函数
getSomeOne(new Person());

 

----------------------------
*********构造函数
构造方法的特征:
1.它具有与类相同的名称
2.它不含返回值
3.它不能在方法中用return语句返回一个值
注意:在构造方法里不含返回值的概念是不同于void的,在定义构造方法时加了void,结果这个方法就不再被自动调用了

在构造函数中,通过this可以调用同一class中别的构造函数,如

   public class Flower{
   Flower (int petals){}
   Flower(String ss){}
   Flower(int petals, Sting ss){
   //petals++;调用另一个构造函数的语句必须在最起始的位置
   this(petals);
   //this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数
   }
   }
   **:1)在构造调用另一个构造函数,调用动作必须置于最起始的位置
   2)不能在构造函数以外的任何函数内调用构造函数

   3)在一个构造函数内只能调用一个构造函数

 

------------------------------------------

this用法1
class Person ()
{  private int age;
   private String name=new String();
   public Person(){}
   public Person( String x)    
   {  name=x;}
   public Person( String x,int y)
   {  name=x;  age=y;}
   public void fun1();
   {  System.out.println(name) }
   public void fun2();
   {  Person a2=new Person("a2");
      a2.fun1();
      this.fun1();  // a1.fun1  this代表对fun2进行调用的对象,fun2运行时是一定有一个对象存在的,这里的this是可以省略的,直接用fun1()
    }
   //this就相当于我所在的那个对象
   public static void main(String [] args)
   { Person a1=new Person("a1");
     a1.fun2();
   }    
}

this用法2
 class Person ()
{  private int age;
   private String name=new String();
   public Person(){}
   public Person( String x)     
   {  name=x;}
   public Person( String x,int y)
   {  name=x;  age=y;}
}
改为
  class Person ()
{  private int age;
   private String name=new String();
   public Person(){}
   public Person( String name)     
   {  this.name=name;}
   public Person( String name,int age)
   {  this.name=name;  this.age=age;}
}
    
this用法3:用构造方法去调用另一个构造方法
 class Person ()
{  private int age;
   private String name=new String();
   public Person(){}
   public Person( String name)     
   {  this.name=name;}
   public Person( String name,int age)
   {  this();   // 调用Person()构造孔方法
      this(name); //调用Person(String name)构造方法
      this.age=age;}
}
---------------------------------------
finalize 析构方法,垃圾回收器  用法 public void finalize(){...}
System.gc() 当在主函数中调用时,启动地垃圾回收finalize(){...}
每个类中都有一个垃圾回收器

Classs A{
...
...
public void finalize()
{ System.out.println("object is going!"); }

public static void main(String[] args)
{ new A();
  new A();
  new A();
  System.gc(); //启动垃圾回收
}
}
运行结果:object is going!
          object is going!
          object is going!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1228785次
    • 积分:9018
    • 等级:
    • 排名:第2152名
    • 原创:120篇
    • 转载:222篇
    • 译文:1篇
    • 评论:143条
    最新评论