一.
面向过程:我应该干什么 重在过程 事物的执行者
面向对象:重点在对象 我该找谁干什么 指挥者
面向对象的好处:
1.将复杂问题简单化
2.从事务的执行者转化为事务的指挥者
3.更贴近人的思维(懒人思维)
类和对象:
java中最基本的单位就是类
类:对抽象事物的描述(可理解为模板)
对象:用类创建出来的就是对象(具体的事物)
public static void main(String[] args) { //创建一个学生类的对象 //类名 对象名 = 初值; //成员变量会随对象一起进入堆中 //并且只要new一次就会在堆中开辟一块内存空间 //Student stu 对象的引用(保存的对象的地址) Student stu = new Student(); //使用 对象名.属性名 进行赋值和取值 stu.name = "IT吴彦祖"; stu.age = 22; stu.gender = "男"; //调用成员方法 对象名.方法名() stu.eat(); stu.playGame(); //哪个对象调用该方法 打印的就是那个对象的属性 stu.sayHi(); }
eg:学生类:
class Student{ //属性(成员变量 实例变量) //书写位置:类中方法外 //行为(方法 函数) 跟函数一样 就static先不写 //书写位置:类中 //思考 没有给成员变量初值 成员变量 有没有值? String name; int age; String gender; //成员方法/实例方法 public void eat() { System.out.println("吃饭"); } public void sleep() { System.out.println("睡觉"); } public void playGame() { System.out.println("打游戏"); } public void sayHi() { System.out.println("姓名"+ name ); System.out.println("性别"+ gender ); System.out.println("年龄"+ age ); } }
二.
成员变量 和 局部变量
1.书写位置
成员变量:类中 方法外
局部变量:方法中或方法上(在方法上即参数部分的变量)
2.在内存中的表现
成员变量:堆内存中
局部变量:栈内存中
3.生命周期
成员变量:随着对象进入堆内存中创建 随着对象销毁而销毁
局部变量:随着方法的调用而入栈 随着方法的结束而销毁
4.作用域
成员变量:整个类中
局部变量:方法中
5.初始值
成员变量:和堆内存一样 默认初始值
局部变量:默认没有初始值 不给初值直接编译报错
public static void main(String[] args) { // 创建一个person对象 Person p1 = new Person(); p1.fun(); //创建不同包下的同名类对象 //需要指定完整包名来创建对象 //一般情况下:不建议写同名类 com.lanou4g.Person p2 = new com.lanou4g.Person(); p2.fun(); //创建不同包下的不同名类 Test test = new Test(); }
三.参数的类型
1.参数是基本数据类型
public static void fun1(int a) { System.out.println(a); a = 10; }
2.参数是引用数据类型
要什么类型就给什么类型
public static void fun2(Person p) { p.name = "Naruto"; }
在main函数中调用
public static void main(String[] args) { int a =100; fun1(a); System.out.println(a); Person p1 = new Person(); p1.name = "鸣人"; p1.age = 28; fun2(p1); p1.sayHi(); }
四.匿名对象
匿名对象即没有名字的对象
1.一般在方法传参数的时候使用
2.只调用一下方法(不赋值的情况下)
public static void setNameAndAge(Person p,String name, int age) { p.name = name; p.age = age; p.sayHi(); } public static void main(String[] args) { //创建两个person对象 并赋值 //将重复代码 抽成一个方法 Person p1 =new Person(); p1.name = "Naruto"; p1.age = 16; p1.sayHi(); Person p2 =new Person(); p2.name = "Sakura"; p2.age = 18; p2.sayHi(); setNameAndAge(p2, "辰", 17); //使用匿名对象 当方法参数 //好处:减少代码量 使用方便 setNameAndAge(new Person(), "haha", 20); //匿名对象也是对象 也可以复制属性 调用成员方法 new Person().name = "xxx"; new Person().age = 30; new Person().sayHi(); //只调用方法可以使用匿名对象 //测试方法时 可能会使用 new Person().fun(); }
五.封装
写方法就是封装的一种
相当于隐藏代码的实现和属性 不能随意修改
需要开放访问方式(方法) 获取 修改
好处:
1.提高代码的复用性
2.提高代码的安全性
关键字(权限修饰符):private
被private 修饰的属性 只能在本类中访问
//java bean对象(java 的实体类 创建出来的对象)
1.声明成员变量 都需要私有化
2.给每一个成员变量提供set 和 get方法
3.必须提供无参的构造方法
class Phone{ private String phoneName; private String color; //对外开放访问方式 //获取方法 //命名规范 //获取 get + 成员变量名(首字母大写) //修改 set+ 成员变量名(首字母大写) //标准写法 set方法是没有返回值的 public String getPhoneName() { return phoneName; } //修改方法(设置方法) public void setPhoneName(String phoneName) { //关键字 this 代表的是本类的对象 //this.成员变量 获取本类的成员变量 //this.成员方法 调用本类的成员方法 this.phoneName = phoneName; //谁调用了这个方法 谁就是this } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void sayHi() { System.out.println(phoneName + "" + color); } }
六.构造方法
对对象的成员变量进行初始化
写法:
1.没有返回值类型的位置(连void都不用写)
2.构造方法方法名要与类名完全一致
创建一个pen类
类中的书写顺序:
1.成员变量
2.构造方法
3.成员方法
4.set/get方法
class Pen{ private String name; private String color; //构造方法(无参) public Pen () { //初始化成员变量(给成员变量赋值) this.name = "圆珠笔"; this.color = "绿色"; System.out.println("我是Pen类的无参构造方法"); } //构造方法(有参)(构造方法的重载) //为了在创建对象的同时 给成员变量赋值 public Pen(String name,String color){ this.name = name; this.color = color; System.out.println("我是有参的构造方法"); } //介绍自己的方法 public void sayHi() { //使用this可以区分成员变量和局部变量 System.out.println(this.name + " " + this.color); } //set/get 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
在main函数中创建一个pen对象
构造方法是系统帮你调的
只要创建对象 系统就会帮你调用构造方法
构造方法只会执行一遍
public static void main(String[] args) { Pen p = new Pen(); p.sayHi(); //测试有参的构造方法 //你传参数系统就会去找你有参的构造方法调用 Pen p1 = new Pen("钢笔", "蓝色"); }
/* * 类中写什么? * 成员变量 * 无参构造方法 * 有参构造方法(有没有都可以) * 成员方法 * set/get方法 */