一.面向对象介绍
面向:拿,找对象:能干活的东西面向对象编程:拿东西过来做对应的事情例:当我们需要生成随机数的时候,我们就要拿Random来帮我们生成;当我们需要输出打印语句时,我们就要拿System.out.println()来帮我们输出打印
好比在生活中,我们洗衣服的时候要拿洗衣机来帮我们,扫地的时候可以拿扫地机器人帮我们扫地
注:面向对象更符合人类思维习惯,让编程更简单,更好理解
面向对象的学习重点是什么?
1. 学习获取已有对象并使用2. 学习如何自己设计对象并使用
二.设计对象并使用
1.类和对象:
类(设计图): 是对象共同特征的描述对象:是真实存在的具体东西注:在Java中,必须先设计类,才能获得对象
2.如何定义类
public class 类名 {成员变量 (代表属性,一般是名词)成员方法 (代表行为,一般是动词)构造器 (后面学习)代码块 (后面学习)内部类 (后面学习)}注:成员变量一般指的是东西的属性,例如手机的品牌,型号,价格成员方法一般指的是东西的行为,表示这个东西能干嘛.例如手机可以打电话,玩游戏
例:
public class phone {
//属性 (成员变量)
//手机品牌
String brand;
//手机价格
double price;
//行为 (成员方法)
//打电话
public void call() {
}
//玩游戏
public void playGame() {
}
}
3.如何得到类的对象
类名 对象名 = new 类名 ();
例: phone p = new phone();
4.如何使用对象
访问属性: 对象名.成员变量访问方法: 对象名.方法名(…)
代码演示:
public class phone {
//属性 (成员变量)
//手机品牌
String brand;
//手机价格
double price;
//行为 (成员方法)
//打电话
public void call() {
System.out.println("手机在打电话");
}
//玩游戏
public void playGame() {
System.out.println("手机在玩游戏");
}
}
public class IT梦 {
public static void main(String[] args) {
//创建手机的对象
phone p = new phone();
//给手机赋值
p.brand = "小米";
p.price = 4999;
//获取手机对象中的值
System.out.println(p.brand);
System.out.println(p.price);
//调用手机中的方法
p.call();
p.playGame();
}
}
5.类的补充注意事项
1. 用来描述一类事物的类,专业叫做javabean类在javabean类中,是不写main方法的2. 编写main方法的类,叫做测试类我们可以在测试类中创建Javabean类的对象并进行赋值调用3.类名首字母建议大写,需要见名知意,驼峰模式4.一个java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名(实际开发中建议还是一个文件定义一个class类)5.成员变量的完整定义格式: 修饰符 数据类型 变量名 = 初始化值;(一般无需指定初始化值,存在默认值)
对象的成员变量的默认值规则
小练习:
编写一个女朋友类,创建女朋友类的对象,给女朋友的属性赋值并调用女朋友类中的方法
答案:
public class GirlFriend {
String name;
int age;
String gender;
public void sleep(){
System.out.println("女朋友在睡觉");
}
public void eat(){
System.out.println("女朋友在吃饭");
}
}
public class IT梦 {
public static void main(String[] args) {
GirlFriend g = new GirlFriend();
g.name = "小美";
g.age = 18;
g.gender = "女";
System.out.println(g.name);
System.out.println(g.age);
System.out.println(g.gender);
g.eat();
g.sleep();
}
}
6.封装
告诉我们,如何正确设计对象的属性和方法对象代表什么,就得封装对应的数据,并提供数据对应的行为例:人关门,我们需要定义两个类,一个人类,一个门类,那么关门这个动作的方法应该写在门类里面,而不是人类里面,这就是封装思想
private关键字(代表私有)
是一个权限修饰符可以修饰成员(成员变量和成员方法)被private修饰的成员只能在本类中才能访问
针对每一个私有化成员变量,如果需要被其他类调用,都要提供对应的set和get方法
set方法:给成员变量赋值get方法:对外提供成员变量的值
代码演示:
public class GirlFriend {
private String name;
private int age;
private String gender;
public void setName(String n){
name = n;
}
public String getName() {
return name;
}
public void setAge(int a){
age = a;
}
public int getAge() {
return age;
}
public void setGender(String g){
gender = g;
}
public String getGender() {
return gender;
}
}
public class IT梦 {
public static void main(String[] args) {
GirlFriend g = new GirlFriend();
g.setName("宝贝");
g.setAge(18);
g.setGender("女");
System.out.println(g.getName());
System.out.println(g.getAge());
System.out.println(g.getGender());
}
}
成员变量和局部变量
局部变量:定义在方法里面的变量叫局部变量成员变量:定义在方法外,类的里面的变量叫成员变量
就近原则:
谁离我近,我就用谁(当局部变量和成员变量重名时,就遵守就近原则)
例:
public class GirlFriend {
//成员变量
private int age;
public void test(){
//局部变量
int age = 10;
System.out.println(age);
}
}
public class IT梦 {
public static void main(String[] args) {
GirlFriend g = new GirlFriend();
g.test();
}
}
this关键字作用:
可以用来区别成员变量和局部变量解释:加了this关键字前缀的变量不会遵守就近原则,而是直接使用成员变量格式:this.变量名当成员变量和局部变量重名时,我们可以使用this关键字来区分成员变量和局部变量
例:
public class Student {
private String name;
private int age;
public Student(){}
public Student(String name , int age){
this.name = name;
this.age = age;
}
public void setName(){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(){
this.age = age;
}
public int getAge(){
return age;
}
}
public class IT梦 {
public static void main(String[] args) {
Student s = new Student("IT梦",18);
System.out.println(s.getName());
System.out.println(s.getAge());
}
}
构造方法:
构造方法也叫做构造器,构造函数
无参数构造方法:在初始化对象时,成员变量的数据均采用默认值有参数构造方法:在初始化对象时,同时可以为对象进行赋值
作用:在创建对象的时候给成员变量进行初始化(赋值)的
格式:
public class Student {修饰符 类名(参数){方法体;}}
特点:
1. 方法名和类名相同,大小写也要一致2. 没有返回值类型,连void都没有3. 没有具体的返回值(不能写return带回结果数据)
执行时机:
1. 创建对象的时候由虚拟机调用,不能手动调用构造方法2. 没创建一次对象,就会调用一次构造方法
例:
public class Student {
private String name;
private int age;
public Student(){
//空参构造
}
public Student(String name , int age){
//带全部参数的构造方法
}
}
构造方法注意事项:
1. 任何类定义出来,默认就自带了无参数构造方法,写不写都有2. 一旦定义了有参数构造方法,无参数构造方法就没有了,此时就需要自己写无参数构造方法3. 建议在任何时候都手动书写上空参和带全部参数的构造方法
标准的JavaBean类
1. 类名需要见名知意2. 成员变量使用private修饰3. 提供至少两个构造方法(无参构造方法和带全部参数的构造方法)4. 成员方法(提供每一个成员变量对应的set和get方法)
代码演示:
//标准javabean
public class Student {
//成员变量
private String name;
private int age;
//空参构造方法
public Student(){}
//带全部参数的构造方法
public Student(String name , int age){
this.name = name;
this.age = age;
}
//每一个成员变量对应的set和get方法
public void setName(){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(){
this.age = age;
}
public int getAge(){
return age;
}
}
拓展:
一个对象的内存图:
两个对象的内存图:
两个引用指向同一个对象的内存图:
从内存的角度解释基本数据类型和引用数据类型:
基本数据类型:数据值是存储在自己的空间中特点:赋值给其他变量时,赋的是真实的值引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值特点:赋值给其他变量时,赋的是地址值
this关键字的内存原理:
重点:
this的本质:代表所在方法调用的地址值
成员变量和局部变量的区别(不需要记,了解一下即可):
温馨提示:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。