面向对象基础

面向对象入门:

面向对象的三大特性:封装、继承、多态

对象与类:对象是具体的,是总括的,例如Tom和Jarry是对象,而猫和老鼠是类。

类:类是由字段(属性)方法两部分构成的

(注:对象所拥有的特性为字段,对象执行的操作为方法)

定义类:

[访问修饰符] class 类名{

            成员变量声明;

            成员方法生命;

 }

注:访问修饰符如public、private、protected等是可选的

类的字段(属性):

[访问修饰符] 数据类型 字段名;  (访问修饰符可选)

类的方法:

public class Person {
    public String name;
    String gender;
    int age;
    public void work(){
        System.out.println(this.name+"的性别为"+gender+",今年"+age+"岁");
    }
}

创建对象: 

类名 对象名 = new 类名();

注: new是关键字,称为实例化 ;

        左边的类名为对象的数据类型 ;

        右边的类名()称为类的构造方法

eg:Person SongJiang = new Person();

(使用new运算符实例化了一个Person对象;实例化的结果是产生了一个Person类的实例,这个实例的名称是SongJiang)

使用对象:

public class Person {
    public String name;
    String gender;
    int age;
    public void info(){
        System.out.println(this.name+"的性别为"+gender+",今年"+age+"岁");
    }
    public static void main(String[] args){
        Person p1=new Person();
        p1.name="宋江";
        p1.gender="男";
        p1.age=21;
        p1.info();
    }
}

对象在计算机中的执行原理:

Person p1 = new Person(); 这句话中“Person p1”表示的是在栈内存中创建了一个Person类型的变量,变量名为p1。而new Person() 会在堆内存中创建一个对象,而对象中包含了人的属性名和属性值,同时系统会为这个Person对象分配一个地址值0x4f3f5b24。当执行

p1.name=“宋江”时,其实就是通过p1找到对象的地址,再通过对象找到对象的name属性,再给对象的name属性赋值为“宋江”;

成员变量的作用域:

public class Person1 {
    public String name;
    public String gender="男";
    public int age;
    public void work(){
        int age=0;
    }
    public void eat(String name){
    }
}

在上面的代码中,name、gender既不属于eat()方法,也不属于work()方法,而是属于Person类本身的字段,它们都是Person类的成员变量,成员变量的作用域是整个类。

当定义一个类的成员变量时,可以选择在定义时进行初始化。这样做可以为成员变量指定一个默认
值。上面的代码 在定义一个 Person 类时将 gender 成员变量初始化为" " ,以表示性别默认为 " "。

局部变量的作用域: 

例如上面例子 work()方法中的变量就是局部变量,局部变量只能在方法内使用。

成员变量与局部变量的区别:

作用域不同。局部变量的作用域仅限定于定义它的方法,在该方法外无法被访
问。成员变量的作用域是在整个类内,所有的成员方法都可以使用它。如果访
问权限允许,还可以在类外部使用成员变量。
初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值, Java 会给它
赋一个默认值, byte short int long 类型的默认值是 0 boolean 类型的默认值
false char 类型的默认值是 '\u0000' (空字符), float double 类型的默认值是
0.0 ,引用类型的默认值是 null 。但是 java 不会给局部变量赋初始值,因此局部变
量在使用前必须初始化。
Java中的数据类型有两大类:
1.基本数据类型:8种:byte、char、short、int、long、float、double、boolean
2.引用数据类型:4种:类、数组、接口、枚举
public class DateType {
    public static void main(String[] args){
        System.out.println("***基本数据类型***");
        int num1=11;
        int num2=num1;
        System.out.println("num1="+num1);
        num2=22;
        System.out.println("把num1赋值给num2后,修改num2的值,num1="+num1);
        System.out.println("***引用数据类型***");
        Person person1=new Person();
        person1.age=11;
        Person person2=person1;
        System.out.println("person1.age="+person1.age);
        person2.age=22;
        System.out.println("把person1对象赋给person2对象,修改person2对象的age属性值后,person1.age="+person1.age);
    }
}

上述例子:对于基本数据类型,不同的变量分别在不同的存储空间中,并且存储空间存储的是该变量的值。赋值操作传递的是变量的值,改变一个变量的值不影响另一个变量的值。

对于引用操作类型,赋值是把原对象的引用(内存地址编号)传递给另一个引用,这两个引用指向同一个内存空间,其中任何一个引用修改了属性的值,另一个也随之被修改。


类和对象的一些注意事项:

1.一个代码文件中,可以写多个class类,但只能有一个是public修饰,且public修饰的类必须和文件名相同。

//public修饰的类Demo1,和文件名Demo1相同
public class Demo1{
}
class Student{
}

2.对象与对象之间的数据不会互相影响,但是多个变量指向同一个对象会互相影响。

 s1和s2两个变量记录的是同一个对象的地址值,s1修改对象的属性值,再用s2访问这个属性,会发现已经被修改了。

构造器:

构造器其实是一种特殊的方法,但这个方法没有返回值类型,方法名必须和类名相同。

public class Gzq {
    public Gzq(){
        System.out.println("无参数构造器被触发执行");
    }
    public Gzq(String name,int age){
        System.out.println("有参数构造器被触发执行");
    }
}

构造器何时执行:new对象就是在执行构造方法

构造器应用场景:在创建对象时,可以用构造方法给成员变量赋值

注意事项:

1. 在设计一个类时,如果不写构造器, Java 会自动生成一个无参数构造器。
2. 一定定义了有参数构造器, Java 就不再提供空参数构造器,此时建议自己加一个无
参数构造器。

this关键字的作用:

1.区分局部变量和成员变量(this.属性名 指代成员变量)

2.访问本类中的方法,此时谁调用就是谁

3.使用this可以调用重载的构造方法,只能在构造方法的第一行使用

静态成员和实例成员的区别: 

1.static在加载类模板的时候初始化,实例成员在创建对象时初始化

2.static可直接通过类名访问属性和方法,实例成员只能通过对象名访问

3.static不能访问实例成员,实例成员都可以访问

4.静态成员不能使用this关键字,但实例成员可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值