黑马程序员-Java类和对象

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
目录:
1. 面向对象编程
2. 类和对象
3. 权限修饰词
4. 内部类

1. 面向对象编程

Java是一门面向对象的编程语言,它具有以下三个基本特性:

(1)封装:面向对象编程的核心思想之一就是将数据和对数据的操作封装在一起。通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,如类的概念。
例如我们实际生活中,动物有哺乳类,人类属于哺乳类,而具体的某个人就是实实在在的一个对象。
(2)继承:继承体现了一种先进的编程模式。子类可以继承父类的属性和功能,同时子类又可以增加独有的数据和功能。比如鲸鱼属于哺乳类,它有哺乳类的共性,它也有自己的生活在海洋的独有的属性和功能。
(3)多态:多态有两种意义。一种是操作名称的多态,可以向操作传递不同的消息,操作再根据传入的消息执行相应的操作。另一种是与继承有关的多态,指同一个操作被不同类型对象调用时可能产生不同的行为。例如,猫和狗喊叫,猫是“喵喵…”,狗是“汪汪…”。

2. 类

Java程序的基本单位就是类,程序的各种功能是由类创建的对象完成的。

2.1 创建一个类
下面是一个简单的长方形类:

class  Triangle{
    int l;//边长
    int h;//对应的高
    //计算面积的方法
    int getArea(){
        int area=(l+h)/2;
        return area;
    }
}

在该示例中可以看到,一个Java类的基本构造:

  • 类声明:
    class关键字+类名,如上例的class Triangle。
  • 类体:
    由一对花括号以及其中包括的语句构成,‘{ }’。
  • 类体中包含的成员变量和方法

(1)类声明
类是一类对象共性的抽象,包含了对象的状态和方法。它是用来定义对象的模板,可以创建对象。

类声明是Java标志符,习惯上类名的首字母大写,如果含有多个单词那么满足驼峰规则,并且类名语义明确,易于理解。

(2)类体
花括号中的所有语句构成了一个类的类体部分。主要包含变量和方法。

  • 变量:变量是属于该类对象的状态参数,比如创建一个代表人的Java类,就可以有姓名,年龄等,而具体的某个人一定有姓名、年龄参数等等,这些就是一个人的状态参数。

  • 方法:方法是该类对象的功能体现,比如可以在人这个类中添加唱歌、健身等等方法,而人类的对象可以调用这些方法从而实现功能。
    一个方法包含方法声明和方法体。

声明一个无返回类型和无参数的方法:
talking是方法名,void表示这是一个无返回类型的方法,花括号里是方法的执行代码

    void talking(){
        System.out.println("Hello!");
    }

声明一个有返回类型和有参数的方法:
myFriend是方法名,String在方法名的前面,表示该方法返回String字符串。方法名后面的圆括号里面包含的是方法的参数,这就声明了一个有返回、有参数的方法

String myFriend(String name){
    String line=name+" is my best friend."
    return line;
}

(3)类设计技巧

  • 为所有的域设置修改器和访问器
  • 类中不要有太多的基本类型变量
  • 类名和方法名应该能体现他们的职责

2.2 创建对象

类是对象的模板,可以创建对象。

(1)构造方法
类中有一部分方法被称为构造方法,用来创建对象。构造方法是一种特殊方法,它的名字必须与所在的类的名字完全相同,而且没有类型。
一个类中可以有多个构造方法,但它们的参数不能相同。
例如:

class Person{
    //无参构造方法
    Person(){}
    //参构造方法
    Person(String name,int age){        
        this.name=name;
        this.age=age;
    }
    String name;//变量定义
    int age;//变量定义
    //方法声明
    void show(){
        System.out.println("My name is"+name+",I this year is "+age+"years old.");
    }
}

注意:当一个类中没有声明构造方法时,也可以创建对象,因为默认的构造方法是无参数的构造方法。

(2)对象的创建
创建对象使用new关键字+构造方法创建:

Person alex=new Person("Alex","18");

对象创建内存图解
对象创建过程内存图解

(3)对象的使用
对象创建后就可以使用了

  • 操作自己的变量,例如 alex.age=20;
  • 调用类中的方法,例如alex.show();

(4)类变量和实例变量
成员变量中用关键字static修饰后的变量称为静态变量或类变量。其他的变量是实例变量。类变量属于类所有,可以使用类名直接调用。
不同的对象静态变量相同,而实例变量不同。所有的对象共享类变量。

(5)类方法
被static修饰的方法称为静态方法或类方法,除了可以被对象调用外,还可以直接被类名调用。

(6)常量
成员变量用关键字final修饰后称为常量。常量命名时候一般用全大写字母,单词之间用下划线分隔。
常量的声明必须初始化。

(7)初始化块
在类体中还可以包含这样的代码形式:

class Person{
    {
        System.out.println("这是一个Person类的构造初始化块");
    }

    static {
        System.out.println("这是一个Person类的类初始化块");
    }
}

类初始化块使用static修饰,在该类被调用的时候就会执行。构造初始化块在创建对象的时候被执行,执行顺序在构造方法之前。

(8) 方法重载
方法重载是指一个类中可以有多个相同名字的方法,但他们的参数不能相同。

class Person{
    //类变量
    static String country="China";
    //实例变量
    String name;
    static int num=1;
    //常量,习惯常量名全大写,使用'_'分隔单词
    final int ID=num++;

    //实例方法
    void show(){
        System.out.println("Hello");
    }
    //重载方法
    void show(String dream){
        System.out.println("My dream is"+dream);
    }
    //类方法
    static void getNumber(){
        System.out.println("当前共有"+num+"人");
    }       
}

(8)关键字this
this可以出现在实例方法和构造方法中,不能出现在静态方法中。
this在构造方法中代表使用该构造方法创建的对象。
this在实例方法中代表调用该方法的对象。

注:静态方法可以被类名直接调用,这时候可能还没有实例,所以静态方法中不能使用this关键字。

3. 权限修饰词

Java中,可以使用权限修饰词对变量、方法、类进行权限声明,以此来决定谁可以访问它们,从而达到保护数据的目的。

(1)权限修饰符
public 最高公共权限
private 私有化权限
protected 受保护权限

(2)用访问权限修饰符修饰成员
被private修饰后的变量或方法,只能在本类中创建对象去访问。
被protected修饰后的变量或方法,如果在同一个包的其它类中创建一个对象后,这个对象能访问自己所有除被private修饰的变量和方法。
被public修饰后的变量或方法,可以在本包或者其它包中创建对象后,通过对象访问。

(3)用访问权限修饰符修饰类
对于类,用public修饰后,被称为公共类,可以在任意包中访问。
如果该类没有加权限修饰符,那么该类默认为包访问权限,可以被同一包中的类其它访问。

4. 内部类

内部类,顾名思义,在一个类中再声明一个类。跟据内部类的声明位置,内部类分为成员内部类和局部内部类。根据有无static修饰词分为静态内部类或普通内部类。

(1)成员内部类
在外部类的成员位置被声明的类。相当于外部类的一个成员。
例如:

class Outer{
    //这是一个成员内部类
    class Inner{}
}

特点:成员内部类拥有包括它的外部类的所有成员的访问权限。
使用方法:

Outer out=new Outer();
//在外围类作用域内
Inner in=out.new Inner();
//Inner in=new Outer().new Inner();可以省略外围类的实例化过程

//在实例方法中
Inner in2=this.new Inner();

//在外围类的作用域之外
Outer.Inner in=new Outer().new Inner();

(2)局部内部类
在方法的局部变量位置声明的内部类称为局部内部类。
例如:

class Outer{
    public void show(){
        //这是一个局部内部类
        class Inner{}
    }
}

注意:局部内部类如果要使用局部变量,那么局部变量必须加final修饰。原因是局部变量随着方法使用完毕会立即消失,而局部内部类如果仍然在使用该变量造成数据前后不一致。所以局部内部类只能访问final修饰的局部变量。

(3)匿名内部类
匿名内部类的前提是存在一个父类或接口。

用法示例:

//声明一个Person类
class Person{}

public class Test{
    public static void main(String[] args){
        //匿名对象
        new Person(){};
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值