美文网首页
JAVA(7)面向对象

JAVA(7)面向对象

作者: 月圆星繁 | 来源:发表于2019-12-05 11:56 被阅读0次

    面向对象

    基本概念

    对象:

    万物皆对象,客观存在的事物皆对象

    面向对象:

    区别于面向过程的思想。

    类:

    确定对象将会拥有的特性(属性)和行为(方法)

    类的特点:
    • 类是对象的类型,类是抽象的概念。
    • 具有相同属性和方法的一组对象的集合
    • 对象是一个你能够看得到、摸得到的具体实体。
    定义类:
    • 类的重要性:所有java程序都以类class为组织单元。
    • 类是模子,确定对象将会拥有的特征(属性)和行为(方法)
    定义一个类的步骤:
    public class 类名 {
          //定义属性(成员变量)
          int a;
          //定义方法
          public void age(){
        
          }
    }
    

    示例:

    public class Phone {
          // 定义属性     
          float screen;
          float  price;
          float  cpu;
          // 定义方法
          void call(){
                  System.out.println("打电话");
          }
          void sendMsg(){
                  System.out.println("发短信");
          }
    }
    

    创建对象

    • 语法:
      类名 对象名 = new 类名( );
      Phone phone = new Phone();

    • 使用对象:
      引用对象属性:对象名.属性
      phone.screen = 5; 赋值
      引用对象的方法:对象名.方法名()
      phone.sendMessage(); //调用方法

    成员变量和局部变量

    • 成员变量:
      定义在类中,用来描述对象将要有什么。
    • 局部变量:
      定义在类的方法中,在方法中临时保存数据。
    • 区别:
    1. 作用域不同:
      局部变量的作用域仅限于定义它的方法
      成员变量的作用域在整个类内部都是可见的
    2. 初始值不同:
      java会给成员变量一个初始值
      java不会给局部变量一个初始值(需要自定义初始值)
      在同一方法中,不允许有同名局部变量;
      在不同的方法中,可以有同名局部变量。
      两类变量(局部变量和全局变量)同名时,局部变量具有更高的优 先级,输出的是局部变量的值;

    构造方法:

    • 使用new+构造方法 创建一个新的对象
    • 构造方法是定义在java类中的一个用来初始化对象的方法
    • 构造方法与类同名且没有返回值
    public 构造方法名(与类名相同)(可以指定参数) {
            // 初始化代码
    }
    
    • 当没有指定构造方法时,系统会自动添加无参的构造方法;(这时如果是无参的构造方法就不需要写构造方法就可以调用)
    • 当有指定构造方式,无论是有参、无参的构造方法,都不会自动添加无参的构造方法
    • 构造方法的重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法
    • 构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值
    public class TelPhone{
            float screen;
            float cup;
            float price;
            // 无参的构造方法
            public TelPhone() {
                    System.out.println("无参的");
            }
           // 有参的构造方法
           public TelPhone(float screen, float cup, float price){
                   //赋值
                   screen = screen;
                   cup = cup;
                   price = price;
                   System.out.println("有参数的构造方法");
           }
           public static void main(String[] args){
                    TelPhone  phone = new TelPhone();
                    TelPhone  phone2 = new TelPhone(6.1f,8.5f,6000.00f);
            }
    }
    

    static 使用之静态变量

    • 被 static 修饰的成员称为静态成员或类成员
    • 被类的所有对象所 共享
    • 静态成员可以使用 类名直接访问,也可以使用 对象名进行访问
    • 使用 static 可以 修饰变量、方法和代码块
    public class HelloWorld{
        static String name = "Ajen";
        public static void main(String[] args)  {
            System.out.println("类名访问:"+ HelloWorld.name);
            //创建对象
            HelloWorld hello = new HelloWorld();
            //使用对象名访问
            System.out.println("对象名访问:"+hello.name);
            hello.name = "MKG";
            System.out.println("通过类名访问:"+ HelloWorld.name);
        }
    }
    

    输出:
    类名访问:Ajen
    对象名访问:Ajen
    通过类名访问:MKG

    static 使用之静态方法

    • 使用 static 修饰方法,称为静态方法或类方法
    • main 方法就是静态方法
    public class HelloWorld{
        //声明静态方法
        public static void print() {
            System.out.println("java");
        }
        public static void main(String[] args) {
            HelloWorld.print(); //类名直接调用
            
            HelloWorld hello = new HelloWorld();
            hello.print();
        }
    }
    

    注意:
    1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员

    调用错误.png
    以上:可以通过创建类的对象,然后通过对象来访问非静态变量
    对象来访问非静态变量.png

    2、在普通成员方法中,则可以直接访问同类的非静态变量和静态变量

    普通成员方法调用.png

    3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法

    public class HelloWorld{
        String name = "ajen"; // 非静态
        static String hobby = "go shopping"; // 静态
        
        // 成员方法
        public void show() {
            System.out.println("你好!");
        }
        
        // 静态方法
        public static void print() {
            HelloWorld hello = new HelloWorld();
            System.out.println("姓名:"+hello.name);
            System.out.println("爱好:"+ hobby);
        }
        
        public static void main(String[] args) {
            // 普遍成员方法必须通过对象来调用
            HelloWorld hello = new HelloWorld();
            hello.show();
            // 直接调用静态方法
            print();
        }
    }
    

    static 使用之静态初始化块

    通过初始化块进行数据赋值

    public class Helloworld {
            String name;  // 定义成员变量
            // 通过初始化块为成员变量赋值
            {
                    name = "Ajen";
            }
    }
    
    • 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

    • 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

    • 代码演示:

    public class HelloWorld{    
        // 声明变量a、b
        int a;
        int b;
        static int c; // 声明静态变量c;
        public HelloWorld() {
            a = 10;
            System.out.println("通过构造方法为变量a赋值");
        }
        
        {
            // 初始化块
            b = 20;
            System.out.println("通过初始化块为变量b赋值");
        }
        
        static {
            // 静态初始化块
            c = 3;
            System.out.println("通过静态初始化块为变量c赋值");
        }
        
        public static void main(String[] args) {
            HelloWorld hello = new HelloWorld();
            System.out.println("a:"+hello.a);
            System.out.println("b:"+hello.b);
            System.out.println("c:"+c);
            HelloWorld hello2 = new HelloWorld();
        }
    }
    
    • 输出结果:
      通过静态初始化块为变量c赋值
      通过初始化块为变量b赋值
      通过构造方法为变量a赋值
      a:10
      b:20
      c:3
      通过初始化块为变量b赋值
      通过构造方法为变量a赋值

    程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块

    相关文章

      网友评论

          本文标题:JAVA(7)面向对象

          本文链接:https://www.haomeiwen.com/subject/lujjyctx.html