面向对象编程一

本文详细介绍了面向对象编程中的static关键字,包括静态成员变量、实例变量的区别,静态方法的使用,以及工具类、继承、权限修饰符和方法重写等概念,帮助读者理解面向对象编程的静态特性和类的组织结构。
摘要由CSDN通过智能技术生成

面向对象编程

一, static修饰成员变量,类变量应用场景

1.static是什么?

叫静态,可以修饰成员变量,成员方法

2.static修饰的成员变量叫什么?怎么使用?有啥特点?
类变量(静态成员变量)

//类名.变量名(推荐)
Student.name="袁华";
//对象名.类变量(不推荐)
Student s1=new Student();
	s1.name="马冬梅";

属于类,与类一起加载一次,在内存中只有一份,会被类的所有对象共享。
3.无static修饰的变量叫什么?怎么使用?有啥特点?
实例变量(对象变量)

//对象.实例变量
public class Student {
		int age;
		}
//对象.实例变量
s1.age=23;

属于对象,每个对象中都有一份。
4.成员变量有几种?各自在什么情况下定义?
(1)类变量:数据只需要一份,且需要被共享(访问,修改)
(2)实例变量:每个变量都要有一份,数据各不同(如name,score,age)
(3)访问自己类中的类变量,是否可以忽略类名不详
写?
可以,注意:在同一个类中,访问自己类的类变量,才可以省略类名不写

public class User {
	//类变量
	public static int number;
	public User() {
		//User.number++;
		//注意:在同一个类中,访问自己类的类变量,才可以省略类名不写
		number++;
	}

}

二,static修饰成员变量方法

1.static修饰的成员变量方法叫什么?如何使用?
类方法(静态方法)
属于类,可以直接用类名访问,也可以用对象访问
2.main方法是啥方法?咋跑起来?
main方法是个类,Test.main

public class Test {
	public static void main(String[] args) {
	for(int i=0;i<args.length;i++){
		System.out.println(args[]
			}
		}
	}
javac Test.java
java Test 12 13 14 15
12
13
14
15
//main方法中存入数据

三,static修饰类方法的应用场景-工具类

1.工具类好处
工具类中的方法都是类方法,每个类方法都是用来完成一个功能的;
提高了代码的复用性;调用方便,提高了开发效率。
2.为何要用类方法,而不是实例方法?
实例方法需要创建对象来调用,会浪费内存。
3.工具类不需要创建对象,建议将工具类的构造方法私有化。

四,static的注意对象

1.使用类方法,实例方法时的几点注意事项
(1)类方法中可以直接访问类的成员变量,不可以直接访问实例成员变量;
(2)实例方法中既可以直接访问类成员,也可以直接访问类成员;
(3)实例方法中可以出现this关键字,类方法中不可以出现this关键字的。

五,static应用-代码块

1.代码块是类的5大成分之一(成员变量,构造器,方法,代码块,内部类)
2.代码块封为两类
(1)静态代码块:
格式:static{}
特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次
作用:完成类的初始化,例如:对类变量的的初始化赋值
(2)实例代码块:
格式:{}
特点:每次创建对象时,执行实例代码块,并在构造器前执行
作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值

六,static应用-单例设计模式,饿汉式单列,懒汉式单例

单例设计模式,饿汉式单例

1.什么是设计模式,设计模式主要学什么?单例模式解决了什么问题?
(1)设计模式就是具体问题的最优解决方案
(2)解决了什么问题?怎么写?
(3)确保一个类只有一个对象
2.单例怎么写?饿汉式单例的特点是什么?
(1)把类的构造器私有;定义一个变量存储类的一个对象;提供一个类方法返回对象

public class A {
	//2.定义一个变量记住类的一个对象
	private static A a=new A();
	//1.必须私有构造器
	private A() {
		
	}

	//3.定义一个类方法返回对象
	public  static A getObject() {
		return a;
	}
}
public class Test1 {
	public static void main(String[] args) {
		//目标:掌握单侧设计模式的写法
		A a1=A.getObject();
		A a2=A.getObject();
		System.out.println(a1);
		System.out.println(a2);
		//执行出结果:a1与a2的地址一样
	}

}

懒汉式单例设计模式

1.拿对象时,才开始创建对象
1.写法:
(1)把类的构造器私有
(2)定义一个类方法用于存储对象
(3)提供一个类方法,保证返回的是同一个对象

public class B {
	//2.定义一个变量,用于存储这个类的一个对象
	private static B b;
	//1.把类的构造器私有
	private B() {
		
	}
	//3.定义一个类方法,这个方法要保证第一次调用时才创建一个对象
	public static  B getInstance(){
		if(b==null) {
			System.out.println("第一次创建对象~~");
			b=new B();
		}
		return b;
	}

}

七, 继承:使用集成的好处

1.什么是继承?继承后有啥特点?
(1)继承就是用extends关键字,让一个类和另一个类建立起一种父子关系
(2)子类可以继承父类非私有的成员
2.带继承关系的类,Java会怎么创建它的对象?对象创建出来后,可以直接访问那些成员?
(1)带继承关系的类。Java会用类和其父类,这多张设计图来一起创建对象
(2)对象能直接访问什么成员,是由子父类这么多张设计图共同决定的,这多张设计图暴露什么成员,对象就可以访问什么成员
3.使用继承有啥好处?
减少了重复代码的编写,提高了代码的复用性

八,继承:权限修饰符

1.什么是权限修饰符?
就是用来校内之类中的成员(成员变量,成员方法,构造器,代码块…)能够被访问的范围
2.权限修饰符有几种?各自的作用是什么?
在这里插入图片描述

九,继承:单继承,Object,方法重写

1.方法重写是什么?
子类写了一个方法名称,形参列表与父类的某个一样的方法的去覆盖父亲
类的方法
2.覆盖方法有哪些注意事项?
(1)建议加上@Override注释,可以看重写是否正确,同时可读性好
(2)子类重写父类方法时,访问权限必须大于或者等于父类被重写的方法权限
(3)重写的方法返回值类型,必须与被重写的方法值类型一样,或者范围更小
(4)私有方法,静态方法不能被重写
3.方法重名有啥应用场景?
当子类觉得父类的方法不好用,或者不满足自己的需求时,就可以用方法名重写

十,继承:子类访问其他成员的特点

1.在子类中访问其他成员(成员变量,成员方法),是依照就近原则进行的
(1)先子类局部范围找
(2)然后子类成员范围找
(3)然后父类成员范围找,如果父类范围还没找到,就报错
2.如果子父类中出现重名的成员,会优先使用子类的,如果此时一定要在父类中使用父类的怎么办?
可以通过supper关键字,指定访问父类的成员变量:supper.父类成员变量/父类成员方法

public class F {
    String name="父类名称";
    }
public class Z extends F{
    String name="子类名称";
 public void print1(){
        String name="局部名称";
        System.out.println(name);//局部
        System.out.println(this.name);//子类
        System.out.println(super.name);//父类
        System.out.println("==子类的print1执行了==");
    }
    }
//如子父类中有都有pringt1方法
 super.print1();

十一,继承:子类构造器的特点(supper,this兄弟构造器)

1.子类构造器特点
子类中全部构造器,都必须先调用父类的构造器,再执行自己的
2.supper()调用父类有参构造器的应用场景是什么?
为对象中包含父类这部分的成员进行赋值

class People{
    private String name;
    private int age;
     public People() {
    }

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

}
class Teacher extends People{
    ...
    public Teacher(String name, int age, String skill) {
        super(name, age);
        this.skill = skill;
    }
    }

3.this()作用
在构造器中调用本类中的其它构造器

public Student(String name,int age){
        this(name,age,"黑马程序员");
}
    public Student(String name, int age, String school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

4.this,supper注意
都必须放在构造器的第一行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值