当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。
可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了。这时就开始思索,
能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。
这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
a:是一种更符合我们思想习惯的思想 懒人思想
b:可以将复杂的事情简单化
c:将我们从执行者变成了指挥者
角色发生了转换
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
就是不断的创建对象,使用对象,指挥对象做事情。
a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
1 public class Person { //定义一个类:class 2 //成员属性,成员变量:定义在类中方法外 3 String name="zhangsan"; 4 int age; 5 char sex; 6 //成员功能,成员方法 7 public void eat() { 8 System.out.println("吃饭"); 9 } 10 11 public void sleep() { 12 System.out.println("睡觉"); 13 } 14 15 public void playGame() { 16 System.out.println("打豆豆"); 17 } 18 }
在一个java文件中写两个类:一个基本的类,一个测试类。
建议:文件名称和测试类名称一致。
创建对象使用。
格式:类名 对象名 = new 类名();
格式:对象名.变量名
格式:对象名.方法名(...)
1 public class Demo08 { 2 public static void main(String[] args) { 3 //创建成员变量 4 Person person = new Person(); 5 // 使用成员变量 6 int age = person.age; 7 //使用成员方法 8 person.eat(); 9 } 10 } 11 class Person { //定义一个类:class 12 //成员属性,成员变量:定义在类中方法外 13 String name="zhangsan"; 14 int age; 15 char sex; 16 //成员功能,成员方法 17 public void eat() { 18 System.out.println("吃饭"); 19 } 20 public void sleep() { 21 System.out.println("睡觉"); 22 } 23 public void playGame() { 24 System.out.println("打豆豆"); 25 } 26 }
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
成员变量:在堆内存
局部变量:在栈内存
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
注意事项:: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
1 public class MyTest2 { 2 public static void main(String[] args) { 3 Student student = new Student(); 4 student.show("王五"); 5 } 6 } 7 class Student { 8 // 成员变量 9 String name="张三"; 10 //局部变量 11 public void show(String name) { 12 //当成员变量和局部变量重名时,那么访问变量的规则就遵从就近原则 13 //就近原则:先从局部范围找,找个变量,找到就使用,如果找不到,去成员位置找,找到就成员 14 System.out.println(name);//王五 15 System.out.println(this.name);//张三 16 } 17 }
就是没有名字的对象
a:调用方法,仅仅只调用一次的时候。
b:匿名对象可以作为实际参数传递。
1 public class MyTest { 2 public static void main(String[] args) { 3 //匿名对象可以作为参数来传递 4 test(new A()); 5 test(new A()); 6 } 7 public static void test(A a){ 8 a.show(); 9 } 10 } 11 class A{ 12 public void show(){ 13 System.out.println("这是一个show方法"); 14 } 15 }
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
a:是一个权限修饰符
b:可以修饰成员变量和成员方法
c:被其修饰的成员只能在本类中被访问
private关键字特点
(1):把成员变量用private修饰
(2):提供对应的getXxx()和setXxx()方法
1 public class Phone { 2 //私有成员变量 3 private String name; 4 private double price; 5 //提供公共的set get 方法 6 public void setName(String mingzi){ 7 name=mingzi; 8 } 9 public void setPrice(double jiage){ 10 11 price=jiage; 12 } 13 public String getName(){ 14 15 return name; 16 } 17 public double getPrice(){ 18 19 return price; 20 } 21 }
当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题
是当前类的对象引用。
简单的记,它就代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁
解决局部变量隐藏成员变量
1 public class Test { 2 public static void main(String[] args) { 3 Phone phone = new Phone(); 4 System.out.println(phone + "调用者的地址值"); 5 phone.setName("小米"); 6 phone.setPrice(500); 7 8 System.out.println("------------------------"); 9 Phone phone2 = new Phone(); 10 System.out.println(phone2 + "调用者的地址值"); 11 phone2.setName("小米"); 12 phone2.setPrice(500); 13 14 } 15 static class Phone { 16 private String name; 17 private double price; 18 public void setName(String name){ 19 System.out.println("this代表调用者的地址值"+this); 20 this.name=name; 21 } 22 public void setPrice(double price){ 23 System.out.println("this代表调用者的地址值" + this); 24 this.price=price; 25 } 26 } 27 }
运行结果:
Java基础4—{面向对(面向对象思想、类与对象、成员变量和局部变量、匿名对象、封装、this关键字))}
原文:https://www.cnblogs.com/wanyan1234/p/12019150.html