用计算机的语言描述现实世界用计算机解决现实世界的问题
世界由对象组成
面向对象的思想描述面向对象的世界符合人类思维习惯
从现实中抽象出类分三步:
第一步:发现类classDog{
}根据“对象”抽象出“类”
第二步:发现类的属性狗类共有的特征:
第三步:发现类的方法狗类共有的行为:
实现领养宠物功能编写宠物类Dog和Penguin创建宠物对象,输入领养的宠物信息并输出
Penguinpgn=newPenguin();pgn.name="qq";pgn.sex="Q仔";能否在创建对象的同时就完成赋值
使用构造方法:Penguinpgn1=newPenguin();
classPenguin{//属性/*无参构造方法*/publicPenguin(){name="qq";love=20;sex="Q仔";System.out.println("执行构造方法");}}构造方法
系统提供默认无参构造方法
publicPenguin(){}自定义构造方法publicPenguin(){name="qq";love=20;sex="Q仔";}publicPenguin(Stringname,inthealth,intlove,Stringsex){this.name=name;this.health=health;this.love=love;this.sex=sex;}系统不再提供默认无参构造方法
this关键字是对一个对象的默认引用,这里用以区分同名成员变量
System.out.println(45);System.out.println(true);System.out.println("狗在玩耍!");调用重载方法pgn=newPenguin();pgn.print();pgn=newPenguin("美美",80,20,"Q仔");pgn.print();一个例子classPenguin{Stringname=null;//昵称inthealth=0;//健康值Stringsex=null;//性别publicvoidPenguin(){ health=10;sex="雄";System.out.println("执行构造方法");}publicvoidprint(){System.out.println("企鹅的名字是"+name+",健康值是"+health+",性别是"+sex);}}Penguinpgn3=newPenguin();pgn3.print();
classDog{privateStringname="旺财";//昵称privateinthealth=100;//健康值privateintlove=0;//亲密度 publicvoidplay(intn){intlocalv;health=health-n; System.out.println(name+""+localv+""+health+""+love);}publicstaticvoidmain(String[]args){Dogd=newDog();d.play(5);}}static静态成员一个例子统计对象被创建出来的个数
classPerson{publicStringname;publicintage;staticpubliclongall_count;publicPerson(){all_count++;}publicPerson(Stringname,intage){all_count++;this.name=name;this.age=age;}//统计人数的函数publiclonggetCount(){returnall_count;}//应该具备找同龄人的功能publicbooleanisSameAge(Personp1){returnthis.age==p1.age;}}classDemo9{publicstaticvoidmain(String[]args){Personp1=newPerson("jame",34);Personp2=newPerson("lucy",34);Personp3=newPerson("lili",34);Personp4=newPerson();System.out.println(p1.getCount()+""+p2.getCount()+""+p3.getCount());System.out.println(p1.isSameAge(p2));System.out.println(p1.isSameAge(p3));}}4:static特点1随着类的加载而加载,静态会随着类的加载而加载,随着类的消失而消失。说明它的生命周期很长。2优先于对象存在。—>静态是先存在,对象是后存在。3被所有实例(对象)所共享。4可以直接被类名调用
用类名调用:Person.print();
静态方法只能访问静态属性,不能访问实例属性
classDog{privateStringname="旺财";//昵称privateinthealth=100;//健康值privateintlove=0;//亲密度 publicvoidplay(intn){staticintlocalv=5; health=health-n; System.out.println(name+""+localv+""+health+""+love);} publicstaticvoidmain(String[]args){Dogd=newDog();d.play(5);}}封装Dogd=newDog();d.health=-1000;属性随意访问,不合理的赋值
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
1.隐藏类的实现细节2.只能通过规定方法访问数据3.方便加入控制语句4.方便修改实现
classDog{privateStringname="旺财";//昵称privateinthealth=100;//健康值privateintlove=0;//亲密度privateStringstrain="拉布拉多犬";//品种publicintgetHealth(){returnhealth;}publicvoidsetHealth(inthealth){if(health>100||health<0){this.health=40;System.out.println("健康值应该在0和100之间,默认值是40");}elsethis.health=health;}//其它getter/setter方法}this用类名定义一个变量(对象,实例)的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法。
那么类里面是够也应该有一个引用来访问自己的属性和方法呢?
JAVA提供了一个很好的东西,就是this对象,它可以在类里面来引用这个类的属性和方法。先来个简单的例子:
publicclassThisDemo{Stringname="Mick";publicvoidprint(Stringname){System.out.println("类中的属性name="+this.name);System.out.println("局部传参的属性="+name);}publicstaticvoidmain(String[]args){ThisDemott=newThisDemo();tt.print("Orson");}}关于返回类自身的引用,《ThinkinginJava》有个很经典的例子。通过this这个关键字返回自身这个对象然后在一条语句里面实现多次的操作
publicclassThisDemo{intnumber;ThisDemoincrement(){number++;returnthis;}privatevoidprint(){System.out.println("number="+number);}publicstaticvoidmain(String[]args){ThisDemott=newThisDemo();tt.increment().increment().increment().print();}}一个类中定义两个构造函数,在一个构造函数中通过this这个引用来调用另一个构造函数
publicclassThisDemo{Stringname;intage;publicThisDemo(){this.age=21;}publicThisDemo(Stringname){this();this.name="Mick";}privatevoidprint(){System.out.println("最终名字="+this.name);System.out.println("最终的年龄="+this.age);}publicstaticvoidmain(String[]args){ThisDemott=newThisDemo("zhangsan");//随便传进去的参数tt.print();}}