Java中的类和对象

类和对象

1.类和对象的认识

在Java中一些皆对象,Java是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象和对象之间的交互完成

把具有相同属性和行为的一类对象抽象为类,使用类来描述这类对象的特征

2.类和类的实例化

类是描述一些对象的统称,对象是这个类中的一个实例,这一类对象所具备的共同属性和行为(方法)都在类中定义

//创建类
class <class_name>{
    filed;//成员属性
    method;//成员方法
        }
​
//实例化对象
<class_name> <对象名> = new <class_name>();

class就是定义类的关键字,类中的元素成为成员属性,类中的方法成为成员方法

定义一个Person类

class Persoon {
    String name;
    int age;
    String sex; 
    void eat(){
        System.out.println("吃饭");
    }
    void sleep(){
        System.out.println("睡觉");
    }
}

注意:类的命名使用大驼峰命名法

类中定义的成员变量都有默认值,默认值就是这个变量所在类的默认值

类的实例化

有了类以后,就可以根据类来产生一个实例化对象

类名称 引用名称 = new 类名称();

产生了类的对象后,就可以使用"."操作符来使用该类的属性和方法

class Persoon {
    String name;
    int age;
    String sex;
    void eat(){
        System.out.println("吃饭");
    }
    void sleep(){
        System.out.println("睡觉");
    }
​
    public static void main(String[] args) {
        Persoon persoon = new Persoon();
        persoon.eat();
        persoon.sleep();
    }
}

3.static关键字

static与对象无关

 修饰属性

static修饰的属性为静态属性,所有对象共享

当一个实例变量被static关键词修饰,就表示类的属性,该属性在JVM的方法区中储存,该类的所有对象共享,所有对象的属性值也都一样

public class TestDemo {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "张三";
        p1.age = 18;
        Person p2 = new Person();
        p2.name = "李四";
        p2.age = 19;
        System.out.println("p1的name = " + p1.name + ",p1的age = " + p1.age + ",p1的city = " + p1.city);
        System.out.println("p2的name = " + p2.name + ",p2的age = " + p2.age + ",p2的city = " + p2.city);
        //输出结果: p1的name = 张三,p1的age = 18,p1的city = 西安
        //         p2的name = 李四,p2的age = 19,p2的city = 西安
    }
}
​
class Person{
    String name;
    int age;
    static String city = "西安";
}

 方法内部不能定义static变量:局部变量保存在栈中,静态变量保存在方法区中,局部变量出了方法就会被栈回收,静态变量不会

常量:在类中定义常量,一般会使用全局常量,用static和final共同修饰。命名规则为:所有单词大写,单词之间用下划线分割

修饰方法

4.构造方法

构造方法是一种特殊的方法,使用关键字new实例化对象的时会自动被调用,构造方法的作用就是产生对象

使用new关键字产生一个对象时大致分为两步

a.为对象分配内存空间

b.调用对象的构造方法

语法规则:

a.方法名与类名相同

b.构造方法没有返回值声明

c.一个类中至少存在一个构造方法,若没有显示定义,编译器会生成一个默认的无参构造

public class TestDemo {
    public static void main(String[] args) {
        Person p = new Person();
    }
}
​
class Person{
    String name;
    int age;
    public Person(){
        System.out.println("Person的构造方法");
    }
}

构造方法可以重载

public class TestDemo {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person("张三");
        Person p3 = new Person("李四",18);
        
    }
}
​
class Person{
    String name;
    int age;
    public Person(){
        System.out.println("Person的构造方法");
    }
    public Person(String n){
        name = n;
        System.out.println("name = " + name);
        System.out.println("Person的一个参数的有参构造");
    }
    public Person(String n,int a){
        name = n;
        age = a;
        System.out.println("name = " + name + ",age = " + age);
        System.out.println("Person的两个参数的有参构造");
    }
}
//输出结果:Person的构造方法
//name = 张三
//Person的一个参数的有参构造
//name = 李四,age = 18
//Person的两个参数的有参构造

5.this关键字

this表示当前对象的引用

1.调用当前对象的成员变量

public class TestDemo {
    public static void main(String[] args) {
        Student student = new Student("张三",18,"男");
        student.shou();
    }
}
​
class Student{
    String name;
    int age;
    String sex;
​
    public Student(String name,int age,String sex) {
        name = name;
        age = age;
        sex = sex;
        System.out.println("Student类的有参构造");
    }
​
    public void shou(){
        System.out.println("name = " + name + ",age = " + age + ",sex = " + sex);
    }
}

 程序设计的理念,就近匹配原则,会找最近的相同名称变量

public class TestDemo {
    public static void main(String[] args) {
        Student student = new Student("张三",18,"男");
        student.shou();
    }
}
​
class Student{
    String name;
    int age;
    String sex;
​
    public Student(String name,int age,String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        System.out.println("Student类的有参构造");
    }
​
    public void shou(){
        System.out.println("name = " + name + ",age = " + age + ",sex = " + sex);
    }
}

6.代码块

1.普通代码块(定义在方法中的)直接用{}定义

public class TestDemo {
    public static void main(String[] args) {
        {
            int x1 = 10;
            System.out.println("x1 = " + x1);
        }
        int x2 = 20;
        System.out.println("x2 = " + x2);
    }
}

2.构造块

直接定义在类中,不加任何修饰符,优于构造方法执行,有几个对象产生就调用几次构造块

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
        Person person1 = new Person();
    }
}
​
class Person{
    String name;
    {
        System.out.println("1.Person的构造块");
    }
    public Person(){
        System.out.println("2.Person的无参构造");
    }
}

 3.静态代码块

定义在类中,使用static关键词修饰,在类加载时执行一次

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
        Person person1 = new Person("张三");
    }
}
​
class Person{
    String name;
    {
        System.out.println("1.Person的构造块");
    }
    public Person(){
        System.out.println("2.Person的无参构造");
    }
    public Person(String name){
        this.name = name;
        System.out.println("2.Person的有参构造");
    }
    static {
        System.out.println("3.Person的静态代码块");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值