前言
一、面向对象介绍
二、设计对象并使用
1.类和对象
代码实现:
public class Phone { //属性 String brand; double price; //行为: public void call(){ System.out.println("手机在打电话"); } public void playGame(){ System.out.println("手机在玩游戏"); } }
public class PhoneTest { public static void main(String[] args) { //创建手机对象 Phone p=new Phone(); //给手机赋值 p.brand="小米"; p.price=1999.98; //获取手机对象中的值 System.out.println(p.brand); System.out.println(p.price); //让手机做事情:调用手机中的方法即可 p.call(); p.playGame(); //拥有第二部手机 Phone p2=new Phone(); p2.brand="苹果"; p2.price=8999; System.out.println(p2.brand); System.out.println(p2.price); p2.call(); p2.playGame(); } }
总结:
2.类的几个补充注意事项
3.练习
public class GirlFriend { //属性 String name; int age; String gender; //行为: public void sleep(){ System.out.println("女朋友在睡觉"); } public void eat(){ System.out.println("女朋友在吃饭"); } }
public class GirlFriendTest { public static void main(String[] args) { //创建女朋友的对象 GirlFriend gf1=new GirlFriend(); gf1.name="刘亦菲"; gf1.age=18; gf1.gender="女"; System.out.println(gf1.name); System.out.println(gf1.age); System.out.println(gf1.gender); gf1.eat(); gf1.sleep(); System.out.println("***************************"); GirlFriend gf2=new GirlFriend(); gf2.name="蒋依依"; gf2.age=18; gf2.gender="女"; //快捷键修改2的时候,可以按住鼠标左键,按住alt不松,选中2,进行批量修改2 //或者选中2,滑动鼠标滚轮,再修改2 System.out.println(gf2.name); System.out.println(gf2.age); System.out.println(gf2.gender); gf2.sleep(); gf2.eat(); } }
总结:
4.开发中类的设计
有四类事物,定义为类:
都是名词,定义为属性:
都是动词,定义为行为:
三、封装
画圆的方法应该放到人的对象中还是圆的对象中呢?
答案是:放到圆的对象中
为什么呢?
画圆的时候需要知道半径,定义在圆的对象中
人关门是谁关的呢?
人只是给了一个作用力,门自己把门关上了
1.private关键字(为了成员变量的安全性)
如何实现正确的可以赋值,错误的不能赋值呢?
private一旦修饰完毕后,只能在本类中使用,不能在其他类中使用.
针对每一个私有化的成员变量,都要提供get和set方法.
set方法:给成员变量赋值
get方法:对外提供成员变量的值
public class GirlFriend { //属性 private String name; private int age; private String gender; //setName的作用是给成员变量name赋值,所以要把name的值给过来,定义变量去接 public void setName(String n){ name=n; } //getName的作用是对外提供name属性的,不需要接收什么 public String getName(){ return name; } //setAge:给成员变量age进行赋值的 //getAge:对外提供成员变量age的值 public void setAge(int a){ if(a>=18&&a<=50){ age=a; }else{ System.out.println("非法参数"); } } public int getAge(){ return age; } //gender public void setGender(String g){ //由于还没有学到字符串的判断内容,这里就先进行赋值 gender=g; } public String getGender(){ return gender; } //行为: public void sleep(){ System.out.println("女朋友在睡觉"); } public void eat(){ System.out.println("女朋友在吃饭"); } }
在这里插入代码片public class GirlFriendTest { public static void main(String[] args) { //创建女朋友的对象 GirlFriend gf1=new GirlFriend(); //赋值 gf1.setName("小诗诗"); gf1.setAge(18); gf1.setGender("女"); System.out.println(gf1.getName()); System.out.println(gf1.getAge()); System.out.println(gf1.getGender()); gf1.eat(); gf1.sleep(); }
2.就近原则和this关键字
当局部变量和成员变量重名时,就会触发就近原则
利用this优化刚刚的GirlFriend类:
public class GirlFriend { //属性 private String name; private int age; private String gender; //setName的作用是给成员变量name赋值,所以要把name的值给过来,定义变量去接 public void setName(String name){ //局部变量表示测试类中调用方法传递过来的数据 //等号的左边:就表示成员位置的name this.name=name; } //getName的作用是对外提供name属性的,不需要接收什么 public String getName(){ return name; } //setAge:给成员变量age进行赋值的 //getAge:对外提供成员变量age的值 public void setAge(int age){ if(age>=18&&age<=50){ this.age=age; }else{ System.out.println("非法参数"); } } public int getAge(){ return age; } //gender public void setGender(String gender){ //由于还没有学到字符串的判断内容,这里就先进行赋值 this.gender=gender; } public String getGender(){ return gender; } //行为: public void sleep(){ System.out.println("女朋友在睡觉"); } public void eat(){ System.out.println("女朋友在吃饭"); } }
GirlFriendTest代码不变
运行结果:
总结:
四、构造方法
1.构造方法的格式
举例讲解:
public class Student { private String name; private int age; //如果我们自己没有写任何的构造方法,那么虚拟机给我们加一个空参构造方法 //注意构造方法没有返回值,连void也不能写 public Student(){ System.out.println("看看我执行了吗?"); } public Student(String name,int age){ this.name=name; this.age=age; } public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.age=age; } public int getAge(){ return age; } }
public class StudentTest { public static void main(String[] args) { //创建对象 //()里面什么也没写,表示调用空参构造,通过观察结果发现确实是调用了空参构造 //Student s=new Student(); // System.out.println(s.getName());//获取的是默认初始化值 // s.setName("张三"); //用set方法进行赋值 //能否在创建变量的同时就给变量赋值呢? //利用有参构造 Student s=new Student("张三",21); System.out.println(s.getName()); System.out.println(s.getAge()); } }
构造方法注意事项:
2.构造方法的作用
创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的.
注意:
为什么呢?见下图:
五、标准JavaBean
1.标准JavaBean类
2.练习:
idea生成set和get方法的小技巧:
1.生成set和get方法的快捷键: alt+insert
如果对你的电脑不起反应,请按: alt+insert+fn
2.插件PTG1秒生成set和get方法
操作如下:
下载之后返回到代码界面,右击空白处:
点击之后可以一键生成空参构造,全参构造和set,get方法.