目录
面向对象介绍
什么是面向对象编程?
面向:拿、找
对象:能干活的东西
面向对象编程:拿东西过来做对应的事情
为什么用面向对象编程?
这种编程更加符合人类思维习惯,编程更简单,更好理解。
面向对象的重点学习什么?
1、学习获取已有对象并使用
2、学习如何自己设计并使用
类和对象
介绍
· 类(设计图):是对象共同特征的描述;
· 对象(能帮我们干活的东西):是真实存在的具体东西。
类的定义
public class 类名{
1、成员变量(代表属性,一般是名词)
2、成员方法(代表行为,一般是动词)
3、构造器
4、代码块
5、内部类
}
只含变量与方法的类(简单)
package text;
public class GirlFriend {
String name;
int age;
String gender;
public void eat(){
System.out.println("吃东西");
}
public void sleep(){
System.out.println("睡觉");
}
}
package text;
public class GirlFriendText {
public static void main(String[] args) {
GirlFriend gf1 = new GirlFriend();
gf1.eat();
gf1.age = 18;
gf1.name = "小诗诗";
System.out.println(gf1.age);
System.out.println(gf1.name);
}
}
构造方法
作用
· 在创建对象的时候给成员变量进行赋值
格式和特点、执行时机
public class 类名{
public 类名(参数){方法体;}
}
特点:
· 方法名与类名相同,大小写也要一致
· 没有返回值类型,连void都没有
· 没有具体的返回值(不能由return带回结果数据)
执行时机:
· 创建对象的时候有虚拟机调用,不能手动调用构造方法
· 没创建一次对象,就会调用一次构造方法
构造方法注意事项
1)构造方法的定义
· 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
· 如果定义了构造方法,系统将不再提供默认的构造方法
2)构造方法的重载
· 带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载。
3)推荐的使用方式
· 无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法
标准的JavaBean类
1)类名需要见名知意
2)成员变量使用private修饰
3)提供至少两个构造方法
· 无参构造方法
· 带全部参数的构造方法
4)成员方法
· 提供每一个成员变量对应的set和get方法
· 如果还有其他行为,也需要写上
5)快捷键
· alt + insert 或alt + fn + insert
· 安装插件PTG(推荐)
定义类的补充注意事项
· 用来描述一类事物的类,专业叫做:Javabean类。在Javabean类中,是不写main方法的。
· 编写main方法的类,叫做测试类。我们可以在测试类中创建javabean类的对象并进行赋值调用。
· 类名首字母建议大写,需要见名之意,驼峰模式。
· 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
· 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化;一般无需指定初始化,存在默认值
封装
什么是封装?
· 告诉我们,如何正确设计对象的属性和方法
· 原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
例如:“人画圆”,画圆该行为(方法)是写在圆的类里边的。画圆该行为需要半径才能实现,而半径是圆的属性,所以画圆该行为(方法)是写在圆的类里边的。“人关门”,关门该行为需要门的状态数据(关或者开),所以关门该行为(方法)是写在门的类里边的。
封装思想的好处
· 让编程变得很简单,有什么事,找对象,调方法就行。
· 降低我们的学习成本,不用记对象有哪些方法,有需要时区API文档找就行
private关键字
· 是一个权限修饰符
· 可以修饰成员(成员变量和成员方法)
· 被private修饰的成员只能在本类中访问
· 如果需要被其他类使用,需要提供相应的set和get方法才行
package text;
public class GirlFriendText {
public static void main(String[] args) {
GirlFriend gf1 = new GirlFriend();
gf1.setName("小诗诗");
gf1.setAge(-1);
gf1.setGender("女");
System.out.println(gf1.getName());
System.out.println(gf1.getGender());
System.out.println(gf1.getAge());
gf1.eat();
gf1.sleep();
}
}
package text;
public class GirlFriend {
private String name;
private int age;
private String gender;
//针对每一个私有化的成员变量,都要提供set和get方法
//set方法:给成员变量赋值
//get方法:对外提供成员变量的值
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
if (a >= 18 && a <= 50) {
age = a;
} else {
System.out.println("非法参数");
}
}
public int getAge() {
return age;
}
public void setGender(String g) {
gender = g;
}
public String getGender() {
return gender;
}
public void eat(){
System.out.println("吃东西");
}
public void sleep(){
System.out.println("睡觉");
}
}
this关键字
有什么作用?
· 可以区别成员变量和局部变量
成员变量和局部变量的区别
· 成员变量:类中方法外的变量
· 局部变量:方法中的变量,形参