从“追求尽量不出错”,到正视“出错是必然”|

如此而已~~~

园龄:3年3个月粉丝:0关注:12

07_Java面向对象基础

Java面向对象基础

一、类和对象

1、什么是对象:

万物皆对象,客观存在的事物皆可为对象

2、面向对象:

关注事物的信息,对事物的属性和行为有一定了解

3、什么是类:

对生活中一类具有共同属性和行为的事物的抽象

类的特点:

​ 类是对象的数据类型

​ 类是具有相同属性和行为的一组对象的集合

4、什么是对象的属性:

对象具有的各种特征,每个对象的每个属性都拥有特定的值

5、什么是对象的行为:

对象能够执行的操作

6、类和对象的关系:

类:是对显示生活中一类具有共同属性和行为的事物的抽象

对象:是能够看得到摸的着的真实存在的实体

创建对象相当于,将类实体化。从一些对象中获取共同特征构建一个类,是将对象抽象化。

7、类的定义:

1、类是Java中基本的组成单位

2、类的组成:属性和行为

属性:在类中通过成员变量来体现(类中方法外的变量)

行为:在类中通过成员方法来体现(和前面的方法相比去掉的static关键字即可)

3、定义步骤:

​ 定义类、编写成员变量、编写类的成员方法

package com.itheima;
/*
创建一个手机类
*/
public class Phone {
//成员变量
String brand;
int price;
//成员方法
public void call(){
System.out.println("打电话");
}
public void sendMessage(){
System.out.println("发短信");
}
}
8、对象的使用:

1、创建对象:

格式:类名 对象名 = new 类型();

2、使用对象

格式:对象名.变量名 对像名.方法名();

package com.itheima;//在一个包中,此类定义在上一个java class中
public class PhoneDemo {
public static void main(String[] args){
//创建对象
Phone p = new Phone(); //new出来的对象在堆内存中有初始值
//使用成员变量
System.out.println(p.brand);
System.out.println(p.price);
//给类对象赋值
p.brand = "小米";
p.price = 2999;
System.out.println(p.brand);
System.out.println(p.price);
p.call();
p.sendMessage();
}
}
9、类和对象的案例学生:
package com.itheima02;
/*
学生测试类
*/
public class StudentDemo {
public static void main(String[] args) {
//创建对象
Student s = new Student();
//使用对象
System.out.println(s.name + "," + s.age);
//属性赋值
s.name = "张三";
s.age = 30;
System.out.println(s.name + "," + s.age);
s.study();
s.doHomework();
}
}

二、对象的内存图

属性在堆内存,行为在栈内存(与前面的内存分区类似)

1、单个对象:

略 属性分配到堆区,行为分配到栈区

package com.itheima03;
/*
创建对象
*/
public class StudentDemo01 {
public static void main(String[] args) {
//创建对象
Student s = new Student();
System.out.println(s);
//使用对象
System.out.println(s.name + "," + s.age);
//属性赋值
s.name = "张三";
s.age = 30;
System.out.println(s.name + "," + s.age);
//使用成员方法
s.study();
s.doHomework();
}
}
2、多个对象:

略 每个对象属性分别分配首地址在堆区,行为共用

package com.itheima03;
/*
创建多个对象
*/
public class StudentDemo02 {
public static void main(String[] args) {
//创建第一个对象
Student s1 = new Student();
s1.name = "张三";
s1.age = 20;
System.out.println(s1.name + "," + s1.age);
s1.study();
s1.doHomework();
//创建第二个对象
Student s2 = new Student();
s1.name = "李四";
s1.age = 28;
System.out.println(s1.name + "," + s1.age);
s2.study();
s2.doHomework();
}
}
3、多个对象向相同:

略 由于是分配到地址值,一个修改所有都会被修改

package com.itheima03;
/*
多个对象指向相同
*/
public class StudentDemo03 {
public static void main(String[] args) {
//创建第一个对象
Student s1 = new Student();
s1.name = "张三";
s1.age = 20;
System.out.println(s1.name + "," + s1.age);
//把第一个对象的地址值赋值给第二个对象
Student s2 = s1;
s1.name = "李四";
s1.age = 28;
System.out.println(s1.name + "," + s1.age);
System.out.println(s1.name + "," + s2.age);
}
}

三、成员变量和局部变量

1、什么是成员变量和局部变量:

成员变量:类中方法外的变量

局部变量:方法中的变量(语句块中执行后就会被自动销毁的变量)

2、成员变量和局部变量的区别:

区别 成员变量 局部变量
类中位置不同 类中方法外 方法内或者方法声明上
内存位置不同 堆内存 栈内存
生命周期不同 随着对象的存在而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同 有默认的初始化值 没有默认值的初始化,必须先定义,赋值,才能使用

四、封装

1、private关键字:

1、是一个权限修饰符

​ 可以修饰(成员变量和成员方法)

​ 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问。

2、针对private修饰的成员变量,如果需要被其它类使用,提供相应的操作

​ 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰

​ 提供"set变量名(参数)"方法,用于设置成员变量的值,方法中用public修饰

3、参考代码:

//Student类 同属于包com.itheima05
package com.itheima05;
/*
学生类
*/
public class Student {
//成员变量
private String name;
private int age;
//get/set方法
public void setName(String n){
this.name = n;
}
public String getName(){
return this.name;
}
public void setAge(int a){
if(a < 0 || a > 120){
System.out.println("你输入的年龄不符合要求");
}
else{
this.age = a;
}
}
public int getAge(){
return this.age;
}
public void show(){
System.out.println(this.name + "," + this.age);
}
}
//StudentDemo测试类
package com.itheima05;
/*
学生测试类
*/
public class StudentDemo {
public static void main(String[] args){
//创建对象
Student s = new Student();
//调用set方法给成员变量赋值
s.setName("张三");
s.setAge(30);
//s.show(); //给出一个固定的格式
//使用get方法获取成员变量的值 得到一个自己想要的格式
System.out.println(s.getName() + "----" + s.getAge());
}
}
2、this关键字:

1、this修饰的变量用于指代成员变量:

​ 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量

​ 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

2、什么时候使用this呢?

​ 解决局部变量与成员变量同名时,将成员变量隐藏的问题

3、this:代表所在类的对象引用

​ 记住:方法被哪个对象调用,this就代表那个对象

4、this的内存原理:

this获取当前调用类方法的对象,即获取对象所拥有的地址值

3、封装:

1、封装的概述:

是面向对象的三大特征之一(封装、继承、多态)

是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部,外界是无法直接操作的

2、封装原则:

将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

成员变量是private,提供对应的getXxx()/setXxx()方法

3、封装的好处:

通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码的复用性

五、构造方法

1、构造方法的定义:

1、构造方法的概述:构造方法是一种特殊的方法其作用就是用来创建对象的

2、构造方法的格式:

public class 类名{
修饰符 类名(参数){
//构造方法的方法体
}
}

3、构造方法的功能:主要是完成对象数据的初始化

2、构造方法的注意事项:

1、构造方法的重建:

未提供构造方法时,系统会自动给出一个无参无实现的构造方法

如果定义了有参构造方法系统将不会提供默认的构造方法,还需使用时自行手动提供

2、构造方法的重载:

根据方法重载的定义来看,可根据参数个数,顺序,类型来重载构造方法(对于构造方法而言后两种无意义)

3、推荐使用方式:

无论是否使用,都手动书写无参构造方法

3、标准类的制作:

1、成员变量:

使用private修饰

2、构造方法:

提供一个无参构造方法

提供一个带多个参数的构造方法

3、成员方法:

提供每一个成员变量对象的setXxx() / getXxx()

提供一个显示对象信息的show()

4、创建对象并为其成员变量赋值的两种方式:

无参构造方法创建对象后使用setXxx()赋值

使用带参构造方法直接创建带有属性值的对象

5、参考代码:

//标准Student类
package com.itheima09;
/*
标准类的制作
*/
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/show方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void show(){
System.out.println(name + "," + age);
}
}
//测试标准类
package com.itheima09;
/*
测试标准学生类
*/
public class StudentDemo {
public static void main(String[] args){
//使用无参构造创建对象
Student s1 = new Student();
s1.setName("张三");
s1.setAge(20);
s1.show();
//使用有参构造创建对象
Student s2 = new Student("李四", 22);
s2.show();
}
}

本文作者:编程初学者求大佬指点

本文链接:https://www.cnblogs.com/fragmentary/p/16737756.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   如此而已~~~  阅读(27)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起