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();
}
}
标签:Java,name,对象,age,基础,面向对象,Student,public,s1
From: https://www.cnblogs.com/fragmentary/p/16737756.html