java中的对象
java中的对象又称实例。
java中将实现对象中的信息称为属性(全局变量),将现实对象中的功能称为方法。
java中的类
java语言中把一组对象中相同属性和方法抽象到一个java源文件就形成了类。
定义类
定义一个类:
- 定义类名
- 定义类的属性
- 定义类的方法
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
一个类可以包含以下类型变量:
**局部变量:**在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
**成员变量:**成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
**类变量:**类变量也声明在类中,方法体之外,但必须声明为static类型。
一个类可以拥有多个方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog类的方法。
构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字new来创建一个对象。
- 初始化:使用new创建对象时,会调用构造方法初始化对象。
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String[] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
}
类与对象
- 类是创建对象的模板,确定对象将会拥有的属性和方法。
- 类是对象的抽象化;对象是类的具体化。
- 类是一种数据类型,是对象的数据类型(不同于int等基本类型:类具有方法)
方法与重载
如何定义方法
方法用于定义类的某种行为(或功能),其语法结构如下:
访问控制符 【修饰符】 返回类型 方法名 (【参数】){ //方法体 }
public void sayHello(){
System.out.println("hello");
}
private static int add(int x,int y){
return x+y;
}
访问控制符
方法中的访问控制符用于限制方法在其他类中的适用范围
访问控制符分为四种:public,protected,友好的,private
修饰符
返回值类型
方法返回引用数据类型的数据,则返回值类型必须是返回数据所属的数据类型或者父类。
方法名
命名规则:首字母必须小写,如果有多个单词组成,从第二个单词开始首字母大写;方法名一般由一个动词或者动名词构成。
动态参数
方法重载
代码块
变量分类
如果未对成员变量设置初始值,系统会自动分配;
- int = 0
- boolean = false
- 自定义类型 = null
局部变量
- 如果局部变量的名字与全局变量名字相同,则在局部变量的作用范围内全局变量被隐藏。
- 如果在局部变量的作用范围内访问该成员变量,则必须使用关键字this来引用成员变量。
- 局部变量在使用前必需显式初始化或赋值,局部变量没有默认值。
- 声明局部变量时,数据类型前除了final外不允许有其他关键字,即定义格式为:[final] 数据类型 变量名 = 初始值;
关键字static
成员变量
- static修饰的成员变量称为类属性(又称静态变量):类成员的值在所有对象之间共享;
- 没有static修饰的成员变量称为实例属性(又称非静态变量):变量值只属于单个对象;
方法
- static修饰的方法称为类方法(又称静态方法):此种方法被所有该类的对象共享;jvm加载类时为其分配入口地址;可以由所在类创建的对象或类名来调用,推荐使用类名直接调用;
- 没有static修饰的方法称为实例方法(又称非静态方法):此种方法对所有该类的对象都是独立的;jvm执行创建对象代码是为其分配入口地址并且只分配一次;只能使用对象来调用;
代码块
- static修饰的代码块称为静态代码块:jvm加载类时该类型代码块执行并且只执行一次;
- 没有static修饰的代码块称为非静态代码块:jvm执行创建对象代码时执行并且创建一个对象执行一次;
注意
构造方法
对象初始化过程
用new创建并初始化对象步骤:
- 给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量;
- 成员变量声明时的初始化
- 初始化块初始化(又称为构造代码块或非静态代码块);
- 构造方法初始化
例题:
输出为:null正在做作业,刘颖正在说话;null正在做作业,null正在说话;