初识面相对象
类和对象_
类 :类是对一群具有共同属性和行为
事物的抽象(抽象)
对象:真实客观存在
的事物(具体存在的,看得见摸得着)
对象和类的关系_
- 类是对象的抽象
- 对象是类的实体
类的定义_
public class 类名(){
// 成员变量
int a;
// 成员方法 (无参无反回值)
public void 方法名(){
// 语句体
}
}
对象的使用_
// 创建对象
类名 对象名 = new 类名();
//使用对象访问成员变量
对象名.成员变量名
//使用对象访问成员方法
对象名.成员方法名();
示例:
public class Demo{
int age;
String name;
public void show(){
System.out.println("姓名:" + name + ", 年龄:" + age);
}
}
-----------------------------------------------------------------------------------------------------------
public class testDemo {
public static void main(String[] args) {
// 创建对象
Demo p = new Demo();
// 使用成员变量
System.out.println(p.name);// 输出 null
System.out.println(p.age);// 输出 0
// 给成员变量赋值
p.name = "张三";
p.age = 66;
System.out.println(p.name);// 输出 张三
System.out.println(p.age);// 输出 66
// 使用成员方法
p.show(); // 输出 姓名:张三, 年龄:66
}
}
成员变量和局部变量的区别_
- 定义位置不同:成员变量定义在类中,方法外,局部变量定义在方法中或者方法声明上
- 内存中位置不同: 成员变量在堆区,局部变量在栈区
- 生命周期不同:
- 成员变量是随着对象的创建和存在,随着对象的销毁而销毁
- 局部变量是随着方法的调用而存在,随着方法的弹栈而销毁
private关键字_
private是一个权限修饰符,但是它的权限是最小的
private可以修饰成员变量和成员方法
- 修饰成员变量:
private 数据类型 变量名;
- 修饰成员方法:
private 返回值类型 方法名(形参){ 方法体 }
- 被private修饰的成员只能在本类中使用,这样就可以保护本类的成员不被其他类访问
被private关键字修饰过后的成员变量或是方法,都只能在当前类中使用
要想访问被private关键字修饰过后的成员变量或是方法可以通过方法来进行参数传递
示例2:
public class Demo2{
private String name;
private int age;
// 定义get 和 set 方法
public void setName(String name){
name = name1;// 把传进来的值赋给name
}
public void setAge(int age){
age = age1; // 把传进来的值赋给age
}
public String getName(){
return name; 返回 name的值
}
public int getAge(){
return age; // 返回 age的值
}
// 被private 修饰的成员方法
public void show(){
sheep();// 在Demo2类中调用被 private 关键字修饰过的sheep()方法
}
private void sheep(){
System.out.println("睡觉中勿打扰...");
}
}
-----------------------------------------------------------------------------------------------------------
public class testDemo2 {
public static void main(String[] args) {
// 创建对象
Demo2 p2 = new Demo2();
// 给成员变量赋值
p2.setName("老六");
p2.setAge(88);
// 获取成员变量
System.out.println(p2.getName);// 输出 老六
System.out.println(p2.getAge);// 输出 88
// 访问变修饰了private 关键字的sheep()方法
p2.show(); // 输出 睡觉中勿打扰...
}
}
this关键字_
作用:使用this可以区分同名的成员变量和局部变量
格式:this.成员变量名
- 如果方法中有局部变量和成员变量同名,那么带this的就是成员变量,不带this就是局部变量
- 如果方法中没有局部变量和成员变量同名,那么带不带this都是成员变量
- this表示谁: 哪个对象调用this所在的方法,this就表示哪个对象(重要)
public class Demo3{
private String name;
private int age;
public void setName(name){
this.name = name; // 用this成员变量的方式访问的是成员变量 不带this的就是局部变量
}
public void setAge(){
age = age;// 没有使用this关键字age 就等于age它本身
}
public void show(){
System.out.println("setName =" + name + ", setAge =" + age);
}
}
-----------------------------------------------------------------------------------------------------------
public class testDemo3 {
public static void main(String[] args) {
// 创建对象
Demo3 p3 = new Demo3();
// 给成员变量赋值
p3.setName("王五");
p3.setAge(77);
// 打印 age,name 的值
p3.show(); // 输出 setName =王五, setAge =0
}
}
构造方法_
构造方法是一种比较特殊的方法,用来创建对象的,并给对象属性赋初始化值的
定义构造方法:
// 空参构造方法
修饰符 构造方法名(){
}
// 有参构造方法
修饰符 构造方法名(形参){
//使用形参给成员变量赋值
}
- 修饰符一般使用public
- 构造方法名只能是类名
- 构造方法没有返回值,连void 都没有
public class Demo4{
private String name;
private int age;
// 空参构造方法
public Demo4(){
System.out.println("空参构造");
}
//有参构造方法
public Demo4(String name,int age){
System.out.println("有参构造");
this.name = name;
this.age = age;
}
}
-----------------------------------------------------------------------------------------------------------
public class testDemo4 {
public static void main(String[] args) {
// 创建Demo4 对象
Demo4 = p4 = new Demo4(); // 输出 空参构造
Demo4 = p4_1 = new Demo4("AAA",67); // 输出 有参构造
}
}
- 如果一个类没有定义构造方法,那么系统会自动给出一个空参构造方法
- 如果一个类中定义了构造方法,那么系统就不会自动给出一个空参构造方法,所以如果想要空参构造方法,就得自己手动定义了
- 构造方法是可以重载的