⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 07_java_advanced_speciality.txt

📁 达内科技上课的 java学习笔记 分为18天学完
💻 TXT
字号:
内部类
反射
集合

三个修饰符:	
	static	final		abstract
	static:它用来修饰类中的成员属性和方法.
			修饰属性:静态属性
				在animal类name和age属性,
				这样的属性又叫做实例属性.
				和它对应的是静态属性或叫类属性.
				属性:
					1.实例属性
						用来描述某个实例的.
						这些属性一定和某个对象相关系.他们就是用来描述对象的.没有对象这些属性就没有意义.

					2.静态属性
						用来描述类的特征.
						这些属性是用来描述整个这个类的特征的.它不合具体的个体/实例/对象相关系.
						
					例子:
						动物园:
							每个动物脖子上挂描述当前这个动物的牌子
							真个动物园动物的数量
					差别:
						1,访问方式
							实例属性:必须要通过对象去访问.a1.name
							静态属性:直接通过类名去访问.
						2,空间分配的时机的方式不一样.
							实例属性:生成对象的时候,每个对象都有一份独立的空间.
							静态属性:在类加载的时候分配空间,并且整个类只有一份.
			修饰方法:静态方法
				1.实例方法.
					它用来描述具体某个对象的特征.
				2.静态方法.
					它用来描述整个类的行为特征.
				差别:
					访问方式
					实例方法,用对象访问.
					静态方法,用类名去访问.可以在没有对象之前就可以访问.
				限制:
					静态方法只能访问静态成员.当然也不能直接去使用this.
					为什么:
						因为静态方法有可能在没有对象之前就可以调用,那么它的实例成员,在方法中是没有意义的.
					
					那么:在非静态方法访问静态成员.

				main()方法为什么一定是静态,因为它是整个程序的入口,那么在调用它之间没有可能做任何事情,所以不能创建任何对象.

				静态方法的特点:
					静态方法不满足多态的特性.
					静态方法是不能被覆盖.
					因为:
						静态方法是类的描述,它和对象没有关系,然而多态是针对于对象来说的.测试的例子来测试一下.
					理解:
						一般出现这样的情况是你的代码不符合规范.对于静态方法应当使用类名来调用,而不应当是用对象名来调用.这些属性和方法都用类名去掉不用对象去调用,那么就不会出现这种静态和多态的混乱.
				静态方法:描述类的行为的不是描述对象的行为的
						
			修饰代码块:
				在类的方法外部用static{....}定义,静态代码块.
				在段代码里面能够出现静态成员,非静态成员不能访问.
				类被加载完成之后,让系统自动执行.
				可以认为静态代码块是类的初始化代码.
			类在何时被加载:
				1,生成该类的对象的时候.new 该类的对象的时候,会加载这个类以及他的父类.
				2,访问类的静态成员的时候.
				3,反射内的方法.
				如果在程序重要加载这个类,一旦加载后,会直接的去调用静态代码块
				Animal a1;这个不会加载类,jvm不用知道你的类型,只用给你分配一个存放引用的空间.
			顺序:
				1.当的一次发生以下情况之一时jvm要加载类.
					1.生成对象
					2.访问静态成员
					3.Class.forName("");
				2.为静态的属性分配空间.(实例化);
				3.去执行静态代码块.
				这是类加载的时候要做的一些工作.
				public class ABC{
					static ABC abc=new ABC();
					static a=10;//如果把这条语句拿到上面结果就会有变化.
					static b;

					public ABC(){
						a=20;
						b=10;
					}

					public static void main(){
						System.out.println(ABC.a);
						System.out.println(ABC.b);
					}
				}
				//结果时10,20
				//在创建abc对象的时候给变量传值了,之后初始化属性a的时候又一次赋了初值.

	final:它能够修饰类,属性,方法,方法中的局部变量.

			修饰类:表示这个类不能被继承.
			修饰属性:该属性不能改变.只能赋一次值
			修饰方法:该方法不能被覆盖
			修饰局部变量:一点定义下来,不能被改变.
			修饰属性和方法的特征:
				final int n=10;//属性.
				n是常量,如果这样,我哪怕在程序中生成100个1000个对象,每个对象都有一个n的空间.由于他们都相同.到不如怎么变化一下n在每个类里面都只保留一份.
				static final经常合起来使用.
				又一种情况例外:
					final int s;
					//可以在构造方法里面去赋值.
					这是说:在不同对象中,对象的该常量的值不同.
					只不过这个对象定下来,这个对象就不可以改了.
				static final	在定义的时候赋值.
				final			可以在构造方法里面赋值.
	
	abstract:用来修饰一个类或者方法.
		修饰类,抽象类.
		修饰方法,抽象方法.
		例子:动物..移动的方法..抽象的.
		把它的方法做成一个抽象方法.在方法后面不要{}直接要;,在前面加上abstract关键字.
		无法确定具体行为,那么就做成抽象方法.

		意义:
			抽象方法,实际上是留给子类去实现的.
		规则:
			如果类里面有抽象方法了必须定义成抽象类.
			反过来,如果某个类没有任何抽象方法,它继承自抽象类,它也是抽象类.
			抽象类不能够实例化,但是可以声明引用,所以可以去利用多态引用到子类.
		
		抽象类实际上是个抽象的概念.	
		抽象类和普通的类的唯一差别是不能实例化.
		其他的所有内容都父类子类的关系一样.
		子类继承自一个抽象类,那么如果你的子类不是抽象类,那么它就要实现父类里面的方法.方法的实现等同方法的覆盖.给出实现体.不论你的大括号里面有没有语句.

		final和abstract不可以同时使用,如果用了abstract那么就是个抽象类,抽象类就是希望去被覆盖,如果声明了final那么就不可以完成.


接口
	特殊的抽象类.
	1.接口中的所有方法都是公开抽象方法.
	2.接口所有属性都是final static
	3.接口没有构造方法.接口不仅不能实例化,并且没有构造方法.
		为什么抽象类有构造方法,因为抽象类有子类.接口没有子类只有实现类
	4.一个类可以同时实现多个接口.
		类去实现接口的关系,可以认为是变相的继承关系.
	5.一个接口也可以同时继承自多个接口.
		
	
	类继承父类,实现接口的差别:
		所有类都有个父类.
		一个类可以继承父类,也可以实现接口,没有冲突.


以前的对象就是个单面体.你可以去定义这个坦克能干什么.
现在如果有了接口,那么我们就可以不同的方式看待坦克,从移动的角度看待,它就是个交通工具.如果把它当作武器来看它就是一个可以攻击的武器.移动和武器都是接口.

行看成岭侧成峰,各个角度都不同.
不识坦克真面目,只因你在用接口.

接口给编程带来的好处
	1.实际上接口是将服务的提供者和服务的使用者分离.
		也就是说:
			接口相当于指定一个标准.对于服务的使用者只需要关心服务的使用.不用关心具体的实现
		最终这样做的好处就是能够降低耦合度.
		一个良好的软件设计的六字箴言,
			高内聚,
				类独立万称工作的能力全面.执行的时候只需要做很少的通信.
			低耦合.
				相互之间依赖很少.
		为了的是提高我们软件的可扩展性和可维护性.
		
		扩展性:
			只需要了解和我要使用的模块的几个功能.
		维护性:
			
				
		为什么说面向接口编程降低了我们程序的耦合度.
			JDBC sun定义的一套接口.
			把服务的提供者和访问者,中间的接口把两者隔离开.
			上层应用和底层实现的关联关系的耦合度降低了.

	2.不要面向对象编程要针对接口,针对抽象编程.
		尽量不要出现那个具体的实现类.
		在程序中本来就要,不用具体的类型,而用一个抽象的类型.
		你的实现变了,我的抽象不用变.
		是不是我整个的代码都要改变.

		接口定的细
			1.减少实现类的负担
			2.给用我的接口人提供个性化的服务.

	我们希望制做一个用户管理系统.可以为是软件中的模块.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -