JavaSE 07 面向对象(上)

    xiaoxiao2021-03-25  26

    1、包

    ⑴ 包的好处

    ⑴ 类似于文件夹,实现了分类存储,方便管理和查找。 ⑵ 允许在不同的包中,存在多个同名的Java文件。

    ⑵ 创建包

    在类的上面添加包的声明语句: 语法: package 包名;

    ⑶ 包名的命名规则

    只能包含字母、数字、下划线、美元符号、小圆点,不能以数字开头,不能是关键字或保留字。

    ⑷ 包名的命名规范

    通过小圆点和小写的英文字母组成,采用域名倒置的写法 域名倒置: www.baidu.com → com.baidu

    示例:com.公司名.部门名.项目名.模块名

    ⑸ 使用DOS编译和运行带有“package”关键字的Java文件

    编译: 语法:javac -d . 文件名.java

    运行:在 .java文件的目录下,语法:java 包名.类名

    ⑹ 包的使用

    ① 使用不同包中的类时,需要导包。 语法: import 包名.类名;(或: import 包名.*;) ② 一个类中可以导入多个包,对于顺序没有要求。 ③ 在一个class文件中,最上面是package,接着是import,然后是class。 package 包名; import 包名.类名; public class 类名 { } ④ 如果需要导入多个包下的同名类,则需要用包名.类名来创建对象。而不能导入多个同名类的包。 示例:com.test1.Person; com.test2.Person; 这样是错误的! 应该为: com.test1.Person p1 = new com.test1.Person(); com.test2.Person p2 = new com.test2.Person();

    ⑺ 静态导入

    JDK5.0之后出现的新特性。 语法:iport static 包名.类名.*; 使用静态的属性或静态方法时,直接调用即可。

    示例:import static java.lang.System.*; out.println("Hello");

    2、修饰符

    ⑴ 访问修饰符

    可以用来修饰类的成员(属性和方法),还可以用来修饰类。

    private 私有的 仅在本类中可以访问 默认(不写) 默认的 在本包的所有类中可以访问 protected 受保护的 在本包中的所有类中,以及其他包中的子类可以访问 public 公共的 任何包中的任何类都可以访问

    按照访问范围:private < 默认 < protected < public

    注意:只有默认和public 可以修饰类。 默认 只有本包中的其他类才能访问该类 public 任何包中的任何类都可以访问该类

    3、封装

    封装:属于面向对象的第一个特征。

    生活中的封装(包裹打包): 隐藏了实际的物品,提高了安全性。 Java中的封装: 隐藏类内部的实现细节,提高了代码的安全性。 好处:避免属性的任意赋值,相当于提高了代码的安全性。

    方法:隐藏了具体实现的细节。 类:隐藏了内部成员(属性、方法、构造器等)。 包:隐藏了包内的类。

    封装的步骤: ⑴ 将属性私有化 语法:private 数据类型 属性名; ⑵ 提供一个公共的set方法,用于给属性赋值。 ⑶ 提供一个公共的get方法,用于访问属性。

    示例:private int age; public void setAge(int age){     // 限制语句 } public int getAge( ){     return age; }

    规范:所有的属性都进行私有化,对其提供公共的set和get方法。

    封装的使用特点: ⑴ 如果属性是只写的,则只提供set方法。 ⑵ 如果属性是只读的,则只提供get方法。

    4、this关键字

    作用:当全局变量(属性)和局部变量重名时,又想访问全局变量,因为局部变量遵循就近原则,所以需要使用this关键字来访问全局变量。 this:代表当前类的对象,谁调用this所在的方法,this就代表谁。

    特点:this可以访问属性、方法和构造器。

    语法:this.属性名 = 值; // 属性 this.方法名( );【一般不这样写】 // 方法 this( ); // 构造器 注意: 方法:每一个方法隐含了一个形参:当前类型 引用对象。 示例: public class Test{     public void myMethod( ){ // 无参的方法     } }

    无参的函数:public void myMethod(Test this){ //隐含形参                       }

    构造器:⑴ 只能在构造器中调用this( )。                ⑵ 通过this关键字调用的构造器,它只能放在构造函数体内的第一行

    应用场合:一般情况下,在本类中访问属性或方法时,没有必要加this关键字。而只有当方法体中的局部变量和类的属性(成员变量)重名时,或方法和其他类的方法重名时,才通过this关键字限定。

    5、构造器【构造函数】

    构造器又称构造函数,属于类的成员。

    声明: 修饰符 构造器名(参数列表){      构造器体 } 注意:⑴ 构造器没有返回值。            ⑵ 构造器的名字必须和当前类名一致。

    调用:       没有形参列表的构造器:new 构造器名( );【new 类名( );】       有形参列表的构造器:new 构造器名(实参);

    作用:       ⑴ 创建对象       ⑵ 通过自定义有形参列表的构造器,可以为属性赋值,减少代码量。

    特点:       ⑴ 如果一个类没有显式地(写出来)声明构造器,则系统将会默认提供一个无参的构造器(只不过我们看不到,但不代表它不存在)。       ⑵ 如果一个类中已经声明了一个构造函数,不管它是有参的,还是无参的,系统都不会再提供一个无参的构造函数。       ⑶ 一个类中支持多个构造函数的存在,但是这些构造函数的参数列表不能相同。类似与方法的重载。这就是构造器的重载

    6、引用数据类型作为参数【难点】

    方法的形参的数据类型可以为基本数据类型,也可以为引用数据类型。其中引用数据类型包括类、接口和数组,这其中就包括我们自己自定义的类。

    ⑴ 创建方法 修饰符 返回值类型 方法名(自定义类型 名){       方法体; } ⑵ 调用方法 ① 创建对象:类名 对象名 = new 类名( );       给对象的属性赋值:对象名.属性名 = 值;

    如果存在有参的构造函数可以写为:       类名 对象名 = new 类名(实参); ② 将对象传入方法:方法名(对象名);

    注意特点:引用数据类型作为形参时,形参的改变会影响实参。

    示例: public class Test {     public static void main(String[] args) {         Person person = new Person();         person.name = “张三”;         person.show(person);         System.out.println(person.name); // 李四     } }

    class Person {   String name;

      public void show(Person p) {     p.name = “李四”;// 改变了形参的值,因为和实参共同引用同一块内存区域,所以也同时改变了实参的引用的区域的值。   }

    }

    备注: ⑴ 当调用people.showPerson( )方法时,会将创建出的person对象传递给showPerson( )方法。就是将person的地址值赋值给showPerson( )中的person。 ⑵ 首先是打印出person的姓名,因为这时和创建出的对象是引用同一块区域,所以是main方法中赋值的“张三”。 ⑶ 紧接着用局部变量,即showPerson(Person person)方法中的person,setName( )。即将共同引用的person的名字改为“李四”。 ⑷ 因为已经改变了person在内存中的name,所以这时候再打印person的名字,就是“李四”。 ⑸ showPerson( )方法执行完毕,返回main方法。因为在 ⑷ 中已经改变了person在内存中的name,所以这时候再打印person的name,就是“李四”。这就是引用数据类型作为形参时,形参的改变会影响实参。注意:如果调用的方法中,改变的不是形参的属性,而是改变了形参的引用。则这时形参的改变不会影响实参。 示例:

    public class Test {   public static void main(String[] args) {     Person person = new Person();     person.name = “张三”;     person.show(person);     System.out.println(person.name); // 张三   } }

    class Person {     String name;

        public void show(Person p) {     Person person = new Person(); // 注意,这里创建了一个新的Person对象     p = person; // 将地址值给了形参p,即改变了形参的引用。     p.name = “李四”;   }

    }

    7、JavaBean

    这是一个符合一定规范的类。 作用:为了和jsp交互使用。

    规范:⑴ 必须具有get和set方法。⑵ 必须具有无参的构造器。 ⑶ 必须用public 修饰。

    8、对象关联

    一个对象又引用了另外一个对象。即一个类型的属性的类型是引用数据类型。

    示例: class Phone{     Phone的成员.. }

    class Person{     String name;     int age;     Phone phone; // Person的一个属性是引用数据类型【Phone】 }

    9、对象数组

    数组的类型为引用数据类型。

    示例: public class Test {   public static void main(String[] args) {     Person[] persons = new Person[2];     Person p1 = new Person(“张三”, 17);     Person p2 = new Person(“李四”, 9);     persons[0] = p1;     persons[1] = p2;

        for (int i = 0; i < persons.length; i++) {       System.out.println(persons[i].getInfo()); // 张三 17\n李四 9     }   } }

    class Person {   private String name;   private int age;

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

      public String getInfo() {     return name + “\t” + age;   } }

    内存图:

    转载请注明原文地址: https://ju.6miu.com/read-200015.html

    最新回复(0)