1、基本概念
对象:对象表示现实世界中一个具体的事物。对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类 :类是一个模板,它描述一类对象的行为和状态。
2、类与对象的关系
类是抽象的概念,仅仅是一个模板,比如说:“人”。
对象是一个你能够看得到、摸得着的具体实体。
类定义了对象将会拥有的特征(属性)和行为(方法)
类是对象的类型,对象是类的实例
3、类的使用步骤
创建一个Person类:
public class Person {
String name;
int age;
void eat() {
}
void sleep() {
}
}
创建Person对象:
public class Person {
String name;
int age;
void eat() {
}
void sleep() {
}
public static void main(String[] args) {
//创建Person对象
Person per = new Person();
//调用方法
per.eat();
}
}
一个类可以包含以下几种变量:
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
4、带参方法
1.为什么要用带参方法
例如,将榨汁机工作过程模拟到程序中:榨汁操作对应榨汁的方法;提供的水果原料对应方法参数;得到的果汁对应方法的返回值。传入不同的参数将得到不同的返回值。
2.带参方法的使用
1)一个参数
定义带参方法:
public class ZhazhiJi {
public String zhazhi ( String fruit ) {
String juice = fruit + "汁";
return juice;
}
}
调用带参方法:
/调用zhazhi方法/
ZhazhiJi myZhazhiji = new ZhazhiJi();
String myFruit = "苹果";
String myJuice = myZhazhi.zhazhi(myFruit);
System.out.println(myJuice);
2)多个参数
定义带参方法:
public class ZhazhiJi {
public String zhazhi ( String fruit,String fruit2 ) {
String juice = fruit + "汁和"+fruit2+"汁";
return juice;
}
}
调用带参方法:
/调用zhazhi方法/
ZhazhiJi myZhazhiji = new ZhazhiJi();
String myFruit = "苹果";
String myFruit2 = "桃子";
String myJuice = myZhazhi.zhazhi(myFruit,myFruit2);
System.out.println(myJuice);
5、构造方法
构造方法作用就是对类进行初始化。每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认不带任何参数的构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
//案例
class Person //人类{
public Person(String n,int a) //构造方法
{
name = n; age = a;
}
private string name;
private int age;
}
public static void main(String[] args){
Person p = new Person("张三",14);//这就是作用
}
new一个对象的时候要用到构造函数,例如Hello hello = new Hello();这时调用的是Hello的无参数构造方法。
Hello hello = new Hello(“hi”);这个是调用Hello的有参数构造方法。
在JAVA中如果不写构造方法的话,会默认加上一个无参数的构造方法,但是如果已经有了一个有参数的构造方法,那么无参数的构造方法就不会默认被加上。无参数的构造方法就失效了
如果Hello类中已经有了一个有参数的构造方法,这时再使用 Hello hello = new Hello();来创建对象的时候就会出错,这就是为什么要强调写了有参数的构造方法就最好加一个无参数的构造方法。
6、方法的重载
在Java程序中,如果同一个类中存在两个方法同名,方法的签名(参数个数、参数类型、类型排列次序)上也一样,将无法编译通过。
但在Java中多个方法重名是允许的,只要保证方法签名不同即可,这种特性称为方法重载(overload)。
方法重载需遵循如下两条规则:
(1)方法名相同;
(2)参数列表(个数、类型、顺序)不同;
注意:返回值不影响方法重载。
构造方法也可以重载 。
以下实例演示了如何重载 MyClass 类的 info 方法:
class MyClass {
int height;
MyClass() {
System.out.println("无参数构造函数");
height = 4;
}
MyClass(int i) {
System.out.println("房子高度为 " + i + " 米");
height = i;
}
void info() {
System.out.println("房子高度为 " + height + " 米");
}
void info(String s) {
System.out.println(s + ": 房子高度为 " + height + " 米");
}
}
public class MainClass {
public static void main(String[] args) {
MyClass t = new MyClass(3);
t.info();
t.info("重载方法");
//重载构造函数
new MyClass();
}
}
以上代码运行输出结果为:
房子高度为 3 米
房子高度为 3 米
重载方法: 房子高度为 3 米
无参数构造函数
7、访问修饰符
Java中定义了private(私有的)、protected(受保护的)和public(公共的)的访问修饰符,同时也定义了一个缺省的访问级别,用于声明类、属性、方法的访问权限。
(1)使用public访问修饰符,类的成员可被同一包或不同包中的所有类访问,也就是说,public访问修饰符可以使类的特性公用于任何类;
(2)使用protected访问修饰符允许类本身、同一包中的所有类和不同包中的子类访问;
(3)如果一个类或类的成员前没有任何访问修饰符时,它们获得缺省的访问权限,缺省的可以被同一包中的其他类访问;
(4)private访问修饰符是限制性最大的一种访问修饰符,被声明为private的成员只能被此类中的其他成员访问,不能在类外看到。
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
private | √ | |||
默认(friendly) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |