JavaSE Day09
1. static关键字
小技巧: 输出语句: 变量 . sout
new Student.run();加载方法
main也是一个static的
1 package com.oop.demo06; 2 3 public class Student { 4 5 private static int age = 24;//静态变量 多线程!! 6 private double score = 90;//非静态变量 7 8 public void run() { 9 } 10 11 public static void go() { 12 } 13 14 public static void main(String[] args) { 15 Student s1 = new Student(); 16 System.out.println(Student.age);//类变量 17 //System.out.println(Student.score);//不行 18 System.out.println(s1.score);//对象调用方法 19 System.out.println(s1.age);//对象调用方法 20 21 new Student().run();//调用run需要new 22 go();//直接调用 23 24 } 25 }
代码块:
1 package com.oop.demo06; 2 3 public class Person { 4 { 5 //代码块(匿名代码块) 6 System.out.println("匿名代码块");//2 赋初始值 7 } 8 9 static { 10 //静态代码块(可以加载一些初始化) 11 System.out.println("静态代码块");//1 只执行一次 12 } 13 14 public Person() { 15 System.out.println("构造方法");//3 16 } 17 18 public static void main(String[] args) { 19 Person person1 = new Person(); 20 System.out.println("======="); 21 Person person2 = new Person(); 22 } 23 }
静态代码块
匿名代码块
构造方法
========
匿名代码块
构造方法
静态导入包:
Math.random()//输出随机数
1 package com.oop.demo06; 2 3 //静态导入包~ 4 import static java.lang.Math.random; 5 import static java.lang.Math.PI; 6 7 public class Test { 8 public static void main(String[] args) { 9 System.out.println(random());//输出随机数 10 System.out.println(PI); 11 } 12 }
final 修饰的不能被继承!!
2. 抽象类
abstract 修饰符可以用来修饰方法也可以修饰类
public abstract void doSomething();
1 package com.oop.demo07; 2 3 //abstract 抽象类: extends:单继承 接口可以多继承!!!! 4 public abstract class Action { 5 6 //约束 ,有人帮我们实现 7 //abstract ,抽象方法,只有方法的名字,没有方法的实现 8 public abstract void doSomething(); 9 } 10 package com.oop.demo07; 11 12 //抽象类的所有方法,继承了它的子类,都必须要实现它的方法,除非abstract 套娃 13 public class A extends Action { 14 @Override 15 public void doSomething() { 16 17 } 18 }
父债子还,子不还孙还。
特点:
-
不能new这个抽象类,只能靠子类去实现它:约束!
-
抽象类中可以写普通的方法
-
抽象方法必须在抽象类中
抽象的抽象:约束~
存在的意义:例如游戏中新建一些角色,抽象出来,提高开发效率,扩展性提高
3. 接口*
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有,见上
接口:只有规范!!自己无法写方法~专业的约束!约束和实现分离:以后工作都是面向接口编程
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是。。。,则必须能。。。”的思想。如果你是汽车,必须能跑。
接口的本质是契约,就像生活中的法律一样,制定好大家都遵守。
面向对象的精髓就是接口,声明接口的关键字是 interface
1 package com.oop.demo08; 2 3 //interface 定义的的关键字,接口都需要有实现类 4 public interface UserService { 5 //接口中的所有定义都是抽象的public 6 void add(String name); 7 void delete(String name); 8 void update(String name); 9 void query(String name); 10 }
接口都需要有实现类,后缀都有Impl,通过implements关键字,并且需要重写方法!!!!!
1 package com.oop.demo08; 2 3 //类可以实现接口 通过implements 必须要重写方法 4 public class UserServiceImpl implements UserService { 5 @Override 6 public void add(String name) { 7 8 } 9 10 @Override 11 public void delete(String name) { 12 13 } 14 15 @Override 16 public void update(String name) { 17 18 } 19 20 @Override 21 public void query(String name) { 22 23 } 24 }
实现多继承------->>>
1 package com.oop.demo08; 2 3 public interface TimeService { 4 void timer(); 5 } 6 package com.oop.demo08; 7 8 //类可以实现接口 通过implements 必须要重写方法 9 public class UserServiceImpl implements UserService,TimeService { 10 @Override 11 public void add(String name) { 12 13 } 14 15 @Override 16 public void delete(String name) { 17 18 } 19 20 @Override 21 public void update(String name) { 22 23 } 24 25 @Override 26 public void query(String name) { 27 28 } 29 30 @Override 31 public void timer() { 32 33 } 34 }
接口中的所有定义的:
方法其实都是抽象的 public abstract
常量都是 public static final
接口的作用:
-
约束
-
定义一些方法,让不同的人实现
-
public astract
-
public static final
-
接口不能被实例化,接口中没有构造方法
-
-
必须要重写接口中的方法!
4. 内部类
内部类就是在一个类的内部在定义一个类
1 package com.oop.demo09; 2 3 public class Outer { 4 5 private int id=10; 6 7 public void out() { 8 System.out.println("这是外部类的方法"); 9 } 10 11 public class Inner { 12 public void in() { 13 System.out.println("这是内部类的方法"); 14 } 15 //获取外部类的私有属性 内鬼!!!!!!!!!!!!终止交易 16 public void getID(){ 17 System.out.println(id); 18 } 19 } 20 }
1 package com.oop; 2 3 import com.oop.demo09.Outer; 4 5 public class Application { 6 public static void main(String[] args) { 7 8 Outer outer = new Outer(); 9 //通过外部类来实例化内部类 10 Outer.Inner inner = outer.new Inner(); 11 12 inner.in(); 13 inner.getID();//内鬼 <---------- 14 } 15 }
通过public static class禁止内部类访问
一个类中可以有多个class类,但是只能有一个public class
局部内部类:
1 package com.oop.demo09; 2 3 public class Outer { 4 5 //局部内部类 6 public void method(){ //在方法里 7 8 class Inner{ 9 } 10 } 11 }
扩展一下,写安卓好像经常见到:。。。
1 package com.oop.demo09; 2 3 public class Test { 4 public static void main(String[] args) { 5 6 //没有名字初始化类,不用讲实例保存在变量中,节省内存!!!! 7 new Apple().eat(); 8 9 //还可以new接口 10 UserService userService = new UserService() { 11 @Override 12 public void hello() { 13 14 } 15 }; 16 } 17 } 18 19 class Apple { 20 public void eat() { 21 System.out.println("1"); 22 } 23 } 24 25 interface UserService { 26 void hello(); 27 28 }

浙公网安备 33010602011771号