对象
对象的使用
创建对象
格式:类名 对象名 = new 类名();
范例:student s = new student();
使用对象
-
使用成员变量
-
格式:对象名.变量名
-
范例s.age
-
-
使用成员变量
-
格式:对象名.方法名()
-
范例:s.name();
-
static
static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。
案例
创建Student 对象
package studentdome; public class Student { String name; int age; public void study(){ System.out.println("天天学习"); } public void sum(){ System.out.println("多晒晒太阳"); } }
调用 对象
package studentdome; public class StudentDome { public static void main(String[] args) { Student s = new Student(); s.age = 19; s.name = "ffy"; System.out.println(s.age +" "+s.name); s.study(); s.sum(); } }
对象的内存图
对个对象指向相同的对象
如下:new 一个新的对象名字为s1
用s2 也指向s1
最后地址相同s2直接对s1修改
最后输出结果相同
-
创建一个对象先加载打栈内存
-
new的 对象和变量到堆内存
-
调用 s1先指向栈内存 在指向堆内存
-
单个内存 和多内存一样 和上面不同
package studentdome; //对象Student在上面 public class Studentlost { 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 =16; System.out.println(s1.name+" ,"+s1.age); System.out.println(s2.name+" ,"+s2.age); } } 最后输出的结果为: 樊帅营 ,20 小帅 ,16 小帅 ,16
成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中之外 | 方法或者方法声明上 |
内存中不同 | 堆内存中 | 栈内存 |
生命周期不同 | 随着对象存在而存在随着对象消失而消失 | 随着方法调用而存在随着方法调用完毕而消失 |
初始化值不同 | 有默认的初始化值 | 没有默认的初始化值必须定义完,赋值才能使用 |
封装
封装简介
-
封装的概述
-
是面向对象三大特征之一(封装,继承,多态)
-
是面向对象编程语言对客观世界模拟,客观世界里的成员变量都是隐藏在对象内部的外部是无法直接操作的
-
-
封装的原则
将类中的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该提供的方法来实现对隐藏信息的操作和访问成员变量private, 提供对应的get/set 方法
-
封装的好处
通过方法来操控成员变量的操作,提高代码的安全性
把代码进行封装,提高了代码的复用性
关键词 private
-
利用set 来更改私有变量
-
利用get 来得到私有变量
-
利用set方法给私有变量赋值
-
最有get出结果
PStudent对象
package studentdome; public class PStudent { //有默认初始值 //全局变量有默认初始值 private String name; private int age; public void setAge(int a){ //如果年龄没有负数,可以写一个判断来返回年龄 age = a; } //私有变量 利用get 和set 方法可以更改 //也可以在方法中写判断 public int getAge(){ return age; } public void setName(String a){ name = a; } //注意定义类型要与返回类型相同 public String getName(){ return name; } public void show(){ System.out.println(name+","+age); } }
main调用对象
package studentdome; public class privatestudent { public static void main(String[] args) { PStudent s =new PStudent(); s.setName("樊帅营"); s.setAge(19); s.show(); //利用get方法更改格式 就是把show 中打印出的,改成其他格式 System.out.println(s.getName()+" "+s.getAge());//一般测试的时候一种格式就够了 } } 结果: 樊帅营,19 樊帅营 19
get/set固定格式
private 定义类型 名字1; get后和set后首字母要大写 public void set名字1(定义类型 名字2){ 名字1 = 名字2 } public 定义类型 get名字1(){ return 名字1; } //调用 //用set给名字1赋值 对象名字.set名字1(赋值) 获得结果 对象名字.get名字1()
this关键字
-
this修饰的变量用于指代成员变量(全局变量 叫法不同)
-
方法的修饰如果变量名相同,不带this修饰的变量指的是形参,而不是成员变量
-
方法的形参没有与成员变量名字相同,不带this修饰的变量指的是成员变量
-
-
什么时候使用this 呢? 解决局部变量隐藏成员变量
-
this代表所在类的对象的引用
-
记住:方法被那个对象调用,this就代表那个对象
-
-
构造方法
-
构造方法的概述
-
构造方法是一种特殊的方法
-
作用创建对象
-
格式:
public class 类名{ 修饰符 类名(参数){ } }
public class Student{ public Student() { //构造方法内书写的内容 //这个是无参构造 } }
-
构造方法当建立对象的时候直接就调用构造方法
-
构造方法的注意事项
-
构造方法的创建
-
如果没有定义构造方法,系统默认将给出一个默认的无参构造方法
-
如果定义了构造方法,系统将不在提供默认的构造方法
-
-
构造方法的重载
-
如果自定义了带参构造方法,还要使用无参构造方法,就必须写一个无参构造方法
-
-
推荐的使用方法
-
无论是否使用,都手工书写无参构造方法.
-
标准类的制作
标准类的制作有两种方法
-
无参构造 后用set 方法给对象赋值 最后并调用
-
有参构造 ,并在创建对象后面括号里面赋值 并调用
package SStudent; public class StudentDome { public static void main(String[] args) { SStudent s = new SStudent(); s.setAge(19); s.setName("樊帅营"); s.show(); SStudent s1 = new SStudent("樊帅营", 18); s1.show(); } }
-
调用的对象
package SStudent; public class SStudent { private String name; private int age; public SStudent(){ } public SStudent(String name, int age){ this.name = name; this.age = age; } 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); } }