黑马程序员_004_private、static、final、abstract修饰符

-------  android培训java培训、期待与您交流! ----------
1、private
        private:私有,权限修饰符,用于修饰类中的成员( 成员变量,成员函数)。 私有只在本类中有效,类外无法访问(即使在类外建立类的对象也无法直接访问,但可在本类中提供访问私有的方式,set get方法,之所以对外提供访问方式,就因为可以在访问方式中可以加入逻辑判断等语句,对访问的数据进行操作,提高代码的健壮性)。私有仅仅是封装的一种表现形式。
        class Person
        {
                private int age;
                public void setAge(int a)
                {
                        if(a>0&&a<180)
                        {
                                age = a;
                        }
                        else
                        {
                                System.out.println("不正常数字");
                        }
                }
                public int getAge(int a)
                {
                        return age;
                }
                void speak()
                {
                        System.out.println("age="+age);
                }
        }
        
        class PersonDemo
        {
                public static void main(String[] args)
                {
                    Person p = new Person();
                    p.setAge(20);
                    p.speak();
                }
        }

2、static
        static关键字,是一个修饰符,用于修饰 成员变量和成员函数。当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,格式: 类名.静态成员
        修饰成员变量:在生成对象时,不被修饰的成员变量,存放在堆内存中。对于多个对象中存在的共同数据,可以用static修饰,用static修饰后的成员变量单独存在方法区(或称为共享区、数据区,函数也放在这里),而不存放在堆内存中,可以节省内存空间。此时,多个对象共用一个静态成员变量,多个对象均可调用这个静态成员变量。

        特点:
                随着类的加载而加载,类一旦被使用,则静态成员就立即存在(成员变量在对象生成时才产生);静态会随着类的消失而消失,静态成员的生命周期最长。静态成员变量也称为类变量。
                优先于对象存在
                被所有对象所共享
                可以直接被类名所调用

        实例变量与类变量区别:
                存放位置:类变量随着类的加载而存在于方法区中;实例变量随着对象            的建立而存在于堆内存中。
                生命周期:类变量生命周期最长,与类同生共死;实例变量与对象同生共死。

        静态使用注意事项:
                类可直接调用静态方法
                静态方法只能访问静态成员变量或静态方法,静态方法中不能调用实例变量
                非静态方法可以访问静态成员
                静态方法中不可以定义this super关键字,因为静态先于对象而存在(this  super  代表的是对象)
                主函数是静态的, 但是主函数中可以通过创建对象调用非静态方法,但是不能用this调用非静态方法。

        静态优点:对对象的共享数据进行单独空间的存储,节省空间,没有必要每个对象都存储一份。可以直接被类名调用。
        静态弊端:生命周期过长;访问出现局限性(静态虽好,但只能访问静态)

3、final
        final,最终,作为一个修饰符。可以修 饰类、函数和变量
        类:被final修饰的类不可以被继承,所以如果不想类被继承,可用final修饰
        方法:被final修饰的方法不可以被重写。
        变量:被final修饰的变量是常量,只能被赋值一次,既可以修饰成员变量也可以修饰局部变量。当在描述事物时,一些数据的出现值是固定的,那么这时 为了增强阅读性,都会给这些值起个名字方便阅读。而这个值不需要改变,所以加上final修饰,作为常量,常量书写规范:所有字母大写如果由多个单词组成,但此间通过 _ 连接。
        另外:内部类定义在类中的局部位置时,只能访问该局部被final修饰的局部变量
        class Demo
        {
                final int x= 2;
                final double  MY_PI = 3.14;
               

                final void show1()
                {
                }
                void show2()
                {

                }
        }

        class SubDemo extends Demo
        {
                 void show()
                {
                }
        }
        问题:
                1、可不可以   final int x; x=2;    ?      //可以
                2、用final修饰的成员不进行初始化,若打印不进行赋值的final成员,编译错误。
        class Demo
{

public static void main(String[] args)
{
//final int x=1;   此方法可以
int y = 5;
System.out.println(y);
final int x;     
//System.out.println(x);//编译错误,x没有初始化
x=3;  //可以先不赋值,然后再赋值一次
System.out.println(x);
}
}

4、abstract,用于修饰类和方法,即抽象类和抽象方法。
/*
    当多个类中出现相同功能,但是功能主体不同,这类可以进行向上抽取,这时,只抽取功能定义,而不抽取功能主题,用abstract。抽象方法必须放在抽象类中,因为若抽象方法放在非抽象类中,类的对象对该抽象方法完全没有意义。
抽象方法:abstract 返回值类型 方法名();   抽象方法没方法主体
特点:
        抽象方法一定存在于抽象类中
        抽象方法和抽象类都必须被abstract修饰
        抽象类不可以用new创建对象,因为调用抽象方法没意义
        抽象类中的方法要被使用,必须由子类重写所有的抽象方法后,建立子类对象来使用。 如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类(抽象方法只能存在于抽象类中)。如果子类重写了父类所有抽象方法,则子类可以不是抽象的。(一般情况下子类都是非抽象的,因此使用抽象类抽象方法,可以在一定程度上强迫子类重写一些抽象方法,因为子类需要创建对象,而抽象类不能创建对象)

抽象类和一般类:
        没有太大不同,该如何描述事物就如何描述事物,只不过该事物中出现了一些看不懂的东西,这些不确定的部分也是该事物的功能,需要明确出来,但是无法定义主题。通过抽象方法类表示。
        抽象类比一般类多了个抽象方法
        抽象类不可以实例化
        抽象类中可以存在非抽象方法。

抽象方法和一般方法:
        一般方法可以被子类直接使用,若子类需要可以对父类方法进行重写。
        抽象方法只定义返回值类型和方法名,没有方法主题,需要由子类重写使用。
*/

abstract class student
{
        abstract void study();//抽象方法必须存在于抽象类中
}
class BaseStudent extends student
{
        void study()//对抽象方法进行重写
        {
                System.out.println("study");
        }
}

5、修饰变量时,
public final static String name
public static final String name
是一样的,也就是说final 与static  谁前谁后都一样。

总结:
        private:成员变量、成员函数。(注意:当内部类在成员位置时,也可以被修饰)
        static:成员变量、成员函数。(注意:当内部类在成员位置时,也可以被修饰)
        final:变量、函数、类
        abstract:类、函数
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值