JAVA学习笔记-对象与类

1.OOA→OOD→OOI(用OOP实现)

   OOA---Object Oriented Analysis 面向对象的分析

   OOD---Object Oriented Design  面向对象的设计 

   OOI---Object Oriented Implementation 面向对象的实现

   OOP---Object Oriented Programming 面向对象程序设计(JAVA)


2.类之间的关系

   依赖:一个类的方法操纵另一个类的对象,就说一个类依赖于另一个类【uses-a】

   聚合:一个类对象包含另一个类对象【has-a】

   继承:类A扩展类B,即类A继承类B【is-a】


3.构造器,更改器,访问器

   构造器:一种特殊的方法,用来构造并初始化对象。

   (new操作符的返回值是一个引用,因为一个对象变量并没有实际包含一个对象,而仅仅引用一个对象)

   更改器方法:对实例域做出修改的方法。  (    eg:xxx.setxx();   )

   访问器方法:仅访问实例域(对象中的数据)而不进行修改的方法。


4.  java中main方法设置为static的原因:

    静态方法不需要对任何对象进行访问,在启动程序的时候还没有任何一个对象,静态的main方法将执行并创建程序所需要的对象。


5.值调用和引用调用

   值调用:表示方法接受的是调用者提供的值

   引用调用:表示方法接受的是调用者提供的变量地址

   一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。

   eg:     

public class CallByTest {

	public static void main(String[] args) {
		int m=1;
		CallByTest cbt=new CallByTest();
		System.out.println(m);
		cbt.changed(m);
		System.out.println(m);
		System.out.println(cbt.test);
		cbt.change(cbt);
		System.out.println(cbt.test);

	}
   public void changed(int a){ //一个尝试修改传入变量的方法
	   a=3;
   }
   
   public void change(CallByTest c){//一个尝试修改传入对象的实例域的方法
	   c.test=200;
   }
   private int test=100;
}                                                 

输出的结果如下:1
                             1
                             100
                             200

原因:当我们向一个方法中传入一个参数时,方法得到的是传入参数的一个拷贝,而不是原来那个参数。当我们传入一个变量时,方法对该变量进行拷贝,所以我们修改的是拷贝的变量,而不是传入的原变量,所以原变量不会改变。当我们传入的是一个对象的引用时,方法对该引用做一个拷贝,但拷贝出来的引用还是跟原来的引用指向同一个对象,所以通过拷贝后的引用仍然可以修改原来的对象。


6.重载

   ①如果一个类中的多个方法有相同的名字,不同的参数,这种特征叫做重载。当我们向具有相同名字的方法传入不同的参数时,编译器会自动进行匹配选择相对应的方法。这个过程称为重载解析

   ②方法的签名:要完整地描述一个方法,需要指出方法名以及参数类型。这叫做方法的签名。eg:add(int a,int b)

   返回类型不是方法签名的一部分,所以,不能有两个名字相同,参数类型也相同而返回类型不同的方法。

   ③方法名相同,参数类型相同而顺序不同的方法也能构成重载。

   ④方法的重载中,如果传入参数的类型小于接受参数的类型,传入参数类型会被提升以匹配接受的参数类型,如果传入的参数类型大于接受参数类型,则必须进行窄化转换。


7.如果一个类提供了至少一个带参数的构造器,而没有提供默认的不带参数的构造器,那么在构造对象的时候必须使用带参数的构造器,如果使用默认的不带参数的构造器会被视为不合法。


8.初始化块和静态块

   初始化数据域有三种方法:1.在构造器中设置值 2.在声明中赋值 3.使用初始化块

   只要构造类的对象,类中的初始化块就会被执行,一个类可以包含多个初始化块。

   静态块用于对静态域进行初始化。

   初始化块和静态快的区别:静态块在类第一次加载的时候执行,并且只执行一次,操作的内存在静态区。初始化块在每一个对象被创建的时候运行,操作的内存在用户区。

eg:

public class CallByTest {
	public static void main(String[] args) {
		CallByTest cbt1=new CallByTest();//第一次创建对象
		System.out.println(CallByTest.test);
		CallByTest cbt2=new CallByTest();//第二次创建对象
		System.out.println(CallByTest.test);
	}
	
	{
		test++;      //初始化块
	}

	static{
		test=1;       //静态块
	}
   
   private static int test;
}

输出的结果为: 2  

                          3

在类第一次被加载的时候,静态块先被执行,test被赋值为1,当对象被创建的时候,初始化块被执行,test变为2,第二次创建对象的时候,静态块不会再执行,初始化块再次被执行,test变为3.


9.初始化数组的三种方式:

①int a[]=new int[5];

②int a[]={1,2,3,4,5};

③int a[]=new int[]{1,2,3,4,5};

在java中,当把一个数组赋值给另一个数组时,复制的其实是数组的引用,所以修改数组2,赋值的数组1也会改变。

public class ArrayTest {
 public static void main(String[] args) {
	 int a[]=new int[]{1,2,3,4,5};
	  int b[];
	  b=a;
	  b[0]=0;
	  System.out.println(Arrays.toString(a));
}
}
结果:
[0, 2, 3, 4, 5]

10.权限关键字:

public:任何人都可以使用
private:只能在同一个类里使用
protected:只能在同一个类或者同一个包使用,子类可以使用父类的protected属性,但不能使用private属性
默认friendly:只能在同一个包中使用

类只能是public或者默认的包访问权限,不能是private或者protected

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值