1.面向对象思想概述(了解)
- A:面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。
- B:面向对象设计其实就是在管理和维护对象之间的关系。
- C:面向对象特征封装(encapsulation)、继承(inheritance)、多态(polymorphism)
类是对某一类事物共性的抽象概念,而对象描述的是一个具体的产物。
每一个属性的集合就构成了一个对象,但是所有的属性都应该是群体的定义,而群体的定义就形成了一个类。
类是一个模板,而对象才是类可以使用的实例。
- 在类之中一般会有两个组成:
成员属性:(Field)有时候会简化成其为属性比如——年龄,姓名,性别
操作方法:(Method)定义对象具有的处理行为比如——唱歌、跳舞、游泳、运动
2.类的定义
-
A:我们学习编程是为了什么
- 为了把我们日常生活中实物用学习语言描述出来
-
B:我们如何描述现实世界事物
- 属性 就是该事物的描述信息(事物身上的名词)
- 行为 就是该事物能够做什么(事物身上的动词)
-
C:Java中最基本的单位是类,Java中用class描述事物也是如此
- 成员变量 就是事物的属性
- 成员方法 就是事物的行为
-
D:定义类其实就是定义类的成员(成员变量和成员方法)
- a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
- b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
学生类的使用(掌握)
-
A:文件名问题
- 在一个java文件中写两个类:一个基本的类,一个测试类。
- 建议:文件名称和测试类名称一致。
-
B:如何使用对象?
- 创建对象并使用
- 格式:类名 对象名 = new 类名();
- 对象名,其实就是合法的标识符:如果是一个单词,所有字母小写;如果多个单词,从第二个单词开始首字母大写
-
C:如何使用成员变量呢?
- 对象名.变量名
-
D:如何使用成员方法呢?
- 对象名.方法名(...)
3.学生类案例演示
* 属性:姓名,年龄,性别
* 行为:学习,睡觉
class JavaObject {
public static void main(String [] args) {
//类名 对象名 = new 类名();
Student s = new Student();
//调用属性并赋值
s.name = "张三";
s.age = 23;
s.gender = "男";
System.out.println(s.name + "..." + s.age + "..." + s.gender); //使用变量
//调用方法
s.study();
s.sleep();
}
}
class Student {
String name; //姓名
int age; //年龄属性
String gender; //性别属性
public void study() { //定义学习的方法;
System.out.println("学生学习");
}
public void sleep() {
System.out.println("学生睡觉");
}
}
4.一个对象的内存图
* 车
* 成员变量:颜色,轮胎数
* 成员方法:跑
class JavaObject {
public static void main(String [] args) {
Car c = new Car(); //创建对象
c.color = "red";//调用属性并赋值
c.num = 4;
c.run();//调用方法
Car c2 = new Car();
c2.color = "black";
c2.num = 3 ;
c2.run();
c2 = null; //当引用设置为null,空指针异常。
c2.run();
Car c3 = c2;
c2.run();
}
}
class Car {
String color; //颜色
int num; //轮胎数
public void run() {
System.out.println("color" + num);
}
}
5.成员变量和局部变量的区别Person(掌握)
-
A:在类中的位置不同
- 成员变量:在类中方法外
- 局部变量:在方法定义中或者方法声明上
-
B:在内存中的位置不同
- 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
- 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
-
C:生命周期不同
- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
-
D:初始化值不同
- 成员变量:有默认初始化值(null或0)
- 局部变量:没有默认初始化值;使用前必须定义,赋值,然后才能使用。
-
注意事项:
- 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则(why可以同名?)。
- 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
- 引用数据类型变量包括哪些:数组,类,接口,枚举
class JavaObject {
public static void main(String [] args) {
Person p = new Person();
p.speak();
}
}
class Person {
String name; //成员变量
int num;
public void speak() { //x和num都是局部变量
int num = 10;
System.out.println(num);
System.out.println(name); //就近原则
}
}
6.方法的形式参数是类名的时候如何调用(掌握)
-
A:方法的参数是类名public void print(Student s){}//print(new Student());
- 如果你看到了一个方法的形式参数是一个类(引用数据类型),这里其实需要的是该类的对象(new地址值)。
- (~ 记住: 引用数据类型当做形式参数的时候给的是地址值;二基本数据类型当做形参的时候给的是值)
class JavaObject {
public static void main(String [] args) {
print(10); //赋值
Student s = new Student(); //创建对象
print(s);
}
public static void print(int x) { //形式参数是基本数据类型,传递的值
System.out.println(x);
}
//形式参数是引用数据类型,传递的地址值
public static void print(Student stu) { //Student stu = new Student();
stu.name = "张三";
stu.age = 23;
stu.speak();
}
}
class Student {
String name; //成员变量
int age;
public void speak() { //局部变量
System.out.println(name + "..." + age);
}
}
7.匿名对象的概述和应用Car(掌握)
- 没有名字的对象叫做匿名对象;
- 只适合调用一次的时候。优点是节省代码,调用完毕就是垃圾,可以被垃圾回收器回收。
-
a:调用方法
class JavaObject { public static void main(String [] args) { //Car c1 = new Car(); //创建有名字的对象 //c1.run(); //new Car().run(); //匿名对象调用完就变成垃圾了 //new Car().run(); //匿名对象只适合对方法的一次调用,因为调用多次就会产生多个对象,不如用有名字对象,否则浪费内存 //匿名对象可以调用属性,但是没有意义,因为调用后就变成垃圾,如果需要赋值还是用有名字对象 new Car().color = "red"; new Car().num = 23; new Car().run(); } } class Car { String color; int num; public void run() { System.out.println(color + "..." + num); } }
-
b:匿名对象可以作为实际参数传递
class JavaObject { public static void main(String [] args) { /*Car c1 = new Car(); //创建有名字的对象 c1.color = "red"; c1.num = 8; c1.run();*/ //Car c1 = new Car(); //method(c1); //method(new Car()); //Car c2 = new Car(); //method(c2); //method(new Car()); for (int i = 0;i < 10 ;i ++ ) { method(new Car()); } } //抽取方法,提高代码的复用性 protected default public static void method(Car cc) { //Car cc = new Car(); cc.color = "red"; cc.num = 8; cc.run(); } }
8.封装的概述(掌握)
-
A:封装概述
- 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
-
B:封装好处
- 隐藏实现细节,提供公共的访问方式
- 提高了代码的复用性
- 提高安全性。
-
C:封装原则
- 将不需要对外提供的内容都隐藏起来。
- 把属性隐藏,提供公共方法对其访问。
9.private关键字的概述和特点(掌握) public protected default
- A:人类赋值年龄的问题
-
B:private关键字特点
- a:是一个权限修饰符
- b:可以修饰成员变量和成员方法
- c:被其修饰的成员只能在本类中被访问
-
C:案例演示
- 封装和private的应用:
- A:把成员变量用private修饰
- B:提供对应的getXxx()和setXxx()方法
- private仅仅是封装的一种体现形式,不能说封装就是私有(讲包时会有更好的理解)
public class JavaObject {
public static void main(String [] args) {
System.out.println("");
Person p1 = new Person();
p1.name = "张三";
//p1.age = 23;
//p1.speak();
p1.setAge(-17);
//int age1 = p1.getAge();
System.out.println(p1.getAge());
}
}
class Person {
String name;
private int age; //私有成员变量
public void setAge(int a) { //a = 17 //对外提供公共的访问方法
if (a > 18 && a<120) {
age = a;
} else {
System.out.println("输入有误");
}
}
public int getAge() { //对外提供公共的访问方法
return age;
}
public void speak() {
System.out.println(name + "..." + age);
}
}
10.this关键字的概述和应用(掌握)
-
A:this关键字特点
- 代表当前对象的引用 (谁来调用我,我就代表谁)
-
B:案例演示
- this的应用场景
- 用来区分成员变量和局部变量重名,调用成员变量
public class JavaObject {
public static void main(String [] args) {
System.out.println("");
Person p1 = new Person();
p1.setName("张三");
p1.setAge(23);
System.out.println(p1.getName() + "..." + p1.getAge());
Person p2 = new Person();
p2.setName("李四");
p2.setAge(32);
p2.speak();
}
}
class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;//在这里this代表p1的地址值
}
public String getName() {
return name;
}
public void setAge(int age) { //a = 17
if (age > 18 && age<120) {
this.age = age;
} else {
System.out.println("输入有误");
}
}
public int getAge() {
return age;
}
public void speak() {
System.out.println(name + "..." + age);
}
}
11.手机类代码及其测试(掌握)
- 把手机类写成一个标准类,然后创建对象测试功能。
-
手机类
- 属性:品牌brand,价格price
- 行为:打电话call,发短信sendMessage,玩游戏playGame
- 成员方法对应的getXxx()和setXxx()方法
public class JavaObject { //创建对象phone
public static void main(String [] args) {
Phone p1 = new Phone(); //01,主方法声明p1,堆内存创建实体
p1.setBrand("Apple"); //03进栈内存 赋值brand
p1.setPrice(5288); //05price
System.out.println(p1.getBrand() + "..." + p1.getPrice());//09
}
}
class Phone {
private String brand; //品牌 02null
private int price; //价格 0
public void setBrand(String brand) { //设置品牌04赋值
this.brand = brand;
}
public String getBrand() { //获取品牌07
return brand;
}
public void setPrice(int price) { //设置价格 06
this.price = price;
}
public int getPrice() { //获取价格08
return price;
}
public void call() {
System.out.println("打电话");
}
public void sendMessage() {
System.out.println("发信息");
}
public void palyGame() {
System.out.println("打游戏");
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。