static关键字
static静态的意思,在之前写方法的时候就使用到这个关键字,这里讲主要讲讲static关键字的用法。
static修饰的成员会随着类的加载到内存中,但类的加载只能执行一次,即static修饰的成员也只能加载一次,而如果没有static修饰的成员只能随着类对象的加载到内存中。
凡是使用static修饰的成员都可以通过类名调用
举个例子:
1 public class Rec { 2 //长 3 public int length; 4 //宽 5 public int width; 6 //矩形面积,随着类的加载而加载到内存中 7 public static double area; 8 //矩形面积,static修饰的成员可以通过类名调用方法 9 public static void show(){ 10 //这里需要注意由于类的加载比类对象的加载要先执行 11 //所以静态方法无法调用非静态的成员 12 System.out.println("我是一个show方法"); 13 } 14 }
Test测试类:
1 public class Test { 2 public static void main(String[] args) { 3 //静态成员可以通过类名直接调用变量 4 Rec.area=10; 5 //静态成员可以通过类名直接调用方法 6 Rec.show(); 7 //但是非静态成员不能通过类名直接调用,只能通过对象调用否则会报错 8 //Rec.length=10; 报错 9 } 10 }
那static一般是什么时候去使用呢?
当你定义一个工具类时,里面的方法要使用static修饰,其他的类一般不使用static修饰,因为static修饰的方法只能调用static的成员。
静态代码块
了解静态代码块之前,先了解代码块。
代码块的格式:
{ 代码内容; }
而静态代码块对于代码块而言多一个static来修饰,代表是一个静态的成员
静态代码块的格式:
static { 代码内容; }
由于静态代码块有static进行修饰,所以静态代码块也是随着类的加载而加载到内存中,所以也是只加载一次。
举个例子:
1 public class Test { 2 static{ 3 System.out.println("这是一个静态代码块"); 4 } 5 public static void main(String[] args) { 6 7 } 8 }
并且静态代码块会比主函数还要先执行。
举个例子:
1 public class Test { 2 static{ 3 System.out.println("这是一个静态代码块"); 4 } 5 public static void main(String[] args) { 6 //主函数中写一句输出语句 7 System.out.println("你好"); 8 } 9 }
效果展示:
从这里看出静态代码块执行的是比主函数的代码还要优先执行,所以静态代码块一般是用于加载资源比如数据库连接池的信息,文件信息,外部文件的加载等,都会写在静态代码块中,并且静态代码块只会执行一次。
对象数组
对象数组:就是一个数组,但是里面存储的内容不是单纯的基本数据类型,而是引用数据类型中的类对象。
语法:
类名 [] 数组名=new 类名[长度];
Rect类:
1 public class Rec { 2 //长 3 public int length; 4 //宽 5 public int width; 6 7 public Rec() { 8 } 9 public Rec(int length, int width) { 10 this.length = length; 11 this.width = width; 12 } 13 public void show(){ 14 System.out.println("这是一个show方法"); 15 } 16 }
测试类:
1 public class Test { 2 3 public static void main(String[] args) { 4 //实现一个对象数组里面存储2个对象 5 Rec[] recs=new Rec[2]; 6 //生成一个匿名对象,存储数组角标为0的位置 7 recs[0]=new Rec(10,38); 8 //生成一个匿名对象,存储数组角标为1的位置 9 recs[1]=new Rec(23,29); 10 11 } 12 }
继承
继承是面向对象(oop)中第二大特性
什么是继承
继承可以使子类获取父类中的属性和方法,也可以在父类的基础之上重新定义方法,追加属性等
如果类A继承类B,也就是所类A被称为子类,而类B被称为父类或基类。
为什么使用继承
上面也提到,继承可以使子类获取父类的属性和方法,所以继承的特点:
①可以提高代码的复用性
②可以起到很好的扩展的作用
如何实现继承
语法:
public class 子类名 extends 父类名{ }
举个例子:
需求是:动物园中引入了小猫(Cat)、小狗(Dog)它们同样有姓名(name),年龄(age),颜色(color)属性,都有一个睡觉方法sleep()需要同一修改这些动物的名称。
这种可以使用继承的方式,将姓名、年龄、颜色分别提取出来当作一个大的类。
代码:
1 //小狗和小猫都是动物的一种 2 //所以我们可以将小猫和小狗中公共的部分提取出来作为一个大的类为Animal 3 public class Animal { 4 public String name; 5 public int age; 6 public String color; 7 8 public void sleep(){ 9 System.out.println(name+"在睡觉"); 10 } 11 } 12 //这里写小狗类使用继承,就可以拥有Animal的属性 13 class Dog extends Animal{ 14 15 } 16 //这里写小猫类使用继承,就可以拥有Animal的属性 17 class Cat extends Animal{ 18 19 }
测试类:
1 public class Test { 2 public static void main(String[] args) { 3 Dog dog=new Dog(); 4 //这里发现子类中Dog类没有写任何属性,但是也是可以调用name属性 5 dog.name="旺财"; 6 //这里发现子类中Dog类没有写任何属性,但是也是可以调用age属性 7 dog.age=3; 8 //这里发现子类中Dog类没有写任何属性,但是也是可以调用color属性 9 dog.color="黄色"; 10 //所以通过继承可以让子类获取父类中的成员,甚至方法也可以继承过来 11 dog.sleep(); 12 13 Cat cat=new Cat(); 14 cat.age=4; 15 cat.name="波斯猫"; 16 cat.color="蓝色"; 17 cat.sleep(); 18 } 19 }
子类可以在父类原有的基础上扩展自己的成员
子类在继承父类的成员时,也可以扩展自己的成员
举个例子:
父类(Person类)
1 public class Person { 2 public String name; 3 public int age; 4 public char sex; 5 6 public void sleep(){ 7 System.out.println(name+"正在睡觉"); 8 } 9 }
子类(Teacher类)
1 public class Teacher extends Person{ 2 //可以扩展成员属性内容 3 public String lesson; 4 5 //可以扩展成员方法内容 6 public void teach(){ 7 System.out.println(name+"正在教学"); 8 } 9 }
继承的注意事项
继承给我们带来许多的便利,但是我们也要遵守继承的规则,这样才能更好的掌握继承
①Java中继承是只支持单继承的,意味着一个类只能有一个父类好比如一个人只能有一个爹一样。
②子类只能继承父类的非私有的成员(成员变量和成员方法),比如父亲私有的东西儿子是没办法得到的
③不要为了继承部分功能而使用继承,类与类之间要是A is B才能使用继承
标签:继承,子类,public,面向对象,static,静态,class From: https://www.cnblogs.com/gzyhrc/p/17810439.html