对象就是实际存在的一些东西 程序来源于生活 软件出现的目的: 用计算机的语言描述现实世界 用计算机解决现实世界的问题 面向对象设计和开发程序的好处: 交流更加流畅 提高设计和开发效率 从现实中抽象出类分三步: 1.找出它的种类 根据“对象”的特征抽象出具体的“类” 2.找出她的属性(静态的特征(变量)) 3.找出它的行为(动态的,(方法))
抽象的原则: 把多个对象抽取出来作为一个类 类图: “+”:public “-”:private
类图好处: 清晰,直观,方便程序的开发和设计
构造方法和重载
构造方法: 作用:给成员属性默认赋予初始值
语法: 访问修饰符 构造方法名(于类名相同)(可以指定参数) { //初始话代码 } //无返回值类型
当类实例化时,系统会自动为我们分配一个无参构造
当自定义构造方法时,系统将不再提供默认无参构造
有参构造就是在无参构造的基础上在小括号内加了参数
this关键字是对一个对象的默认引用,这里用以区分同名成员变量
方法重载: 方法名相同 参数项不同(个数不同,类型不同,顺序不同) 与返回值,访问修饰符无关 在同一个类中
static关键字 static修饰变量的叫做静态变量 或者 类变量 普通变量叫做:实例变量 普通成员变量 static 修饰方法叫做静态方法
用static修饰的属性或方法,可以直接通过类名来访问,无需new出实例里对象
用final修饰的变量称为常量,其值固定不变 例: static final string NAME=“房上的猫”; final:常量关键字(规范:变量名大写)
静态调用: 1.实例化对象 对象.静态方法();对象.静态属性; 2. 类名.属性;类名.方法();
静态代码块:只能给static的属性赋值 static{ } 注意:代码块作用是给静态属性赋予初始值使用的 永远都比构造方法先执行一步
普通属性: 实例变量 在程序中任何变量或者代码都是在 编译时 由系统自动分配内存来存储的 静态属性:类变量 所谓静态就是指在编译后所分配的 内存会一直存在 直到程序退出 内存才会释放这个空间,也就是只要程序运行,那么这块内存就会一直存在
static的方法有以下几条限制: 它们仅能调再其他的static 方法。 它们只能访回static数据
static可以用来修饰属性,方法和代码块
this关键字的用法: 调用属性 调用方法 调用构造方法:如果使用,必须是构造方法中的第一条语句
总结:
从现实世界抽象出类 找出名词确定类、属性 找出动词确定方法 剔除与业务无关的属性和方法 方法重载的规则 方法名相同 参数项不同 与访问修饰符和返回值无关
废话不多说,上例子:
/**
* 企鹅类
* @author xjz
*
*/
public class Penguin {
static String name;//静态成员变量 类变量
int health;//实例变量 普通成员变量
int love;
String sex;
static final String PENGUIN_SEX1="Q仔";//性别
static final String PENGUIN_SEX2="Q妹";//性别
public static void showPeng(){
System.out.println("静态方法中名称为:"+name);
}
// 静态代码块中只能给static的属性赋值
static{
name="初始值";
System.out.println("我是静态代码块");
}
/**
* 无参数构造:
* 1)方法名与类同名
* 2)没有返回值
* 3)与返回的修饰符无关
* 作用:给成员属性默认赋予初始值
*/
public Penguin(){
name="无名氏";
health=100;
love=10;
}
/**
* 注意:参数变量和成员变量同名,必须使用this给成员变量指定
* this本类中的对象
* @param name
* @param health
* @param love
* @param sex
*/
public Penguin(String name,int health,int love,String sex){
this.name=name;
this.health=health;
this.love=love;
this.sex=sex;
}
public void print()
{
System.out.println("宠物自白:我的名字叫"+this.name+"\n健康值为:"+health+"\n和主人的亲密关系"+love+"我是一只"+this.sex);
}
}
public class Dog {
//属性
//昵称
String name="无名氏";
//健康值
int health=100;
//亲密度
int love=0;
//品种
String strain="聪明的拉不拉多犬";
/**
* 输出具体的狗类对象的信息
*/
public void print()
{
System.out.println("宠物自白:我的名字叫"+this.name+"\n健康值为:"+health+"\n和主人的亲密关系"+love+"我是一只"+this.strain);
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Penguin peng=new Penguin();//系统默认会分配一个无参数构造 ,调用无参数构造赋值
peng.print();
Penguin peng1=new Penguin("楠楠", 100,90,"Q仔");
//自定义一个有参数构造,系统就不在默认分配无参数构造,使用无参数构造时,必须手动添加无参数构造的定义
peng1.print();
//调用静态的方式1:实例化对象,对象.静态方法(); 对象.静态属性;
peng.showPeng();
peng.sex=peng.PENGUIN_SEX1;
//调用静态的方式2: 类名.属性或方法
Penguin.name="兰兰";
Penguin.showPeng();
}
}