【Java】类和对象,封装

这篇具有很好参考价值的文章主要介绍了【Java】类和对象,封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.类和对象的定义 

2.关键字new

3.this引用

4.对象的构造及初始化

5.封装

//包的概念

//如何访问

6.static成员

7.代码块

8.对象的打印


1.类和对象的定义 

对象:Java中一切皆对象。

类:一般情况下一个Java文件一个类,每一个类对应一个字节码文件(*.class)

       1)字段 / 属性 / 成员变量:定义在类中,方法的外面;2)方法

类似于C语言的结构体。

成员变量未初始化时都有一个默认值:引用类型默认值为null;int类型默认值为0;float类型默认值为0.0f;char类型默认值为'\u0000';boolean类型默认值为false 

class WashMachine{//类
    //字段/属性/成员变量
    public String brand;
    public String type;
    public double weight;
    public double length;
    public double height;
    public String color;
    //成员方法
    public void washClothes(){
        System.out.println("洗衣功能");
    }
    public void dryClothes(){
        System.out.println("脱水功能");
    }
    public void setTime(){
        System.out.println("定时功能");
    }
}

注意:

1> idea中如何打开当前类所在文件夹:*. java + 右键 +Open in +  Explorer;

2>  当类由public修饰时,类名必须和文件名一致;

3> 不要轻易去修改public修饰的类的名称,若要修改:文件名 + 右键 + Refactor + Rename;

4> 类中的方法不需要static修饰。

2.关键字new

public static void main(String[] args) {
    WashMachine washmachine1 = new WashMachine();
    WashMachine washmachine2 = new WashMachine();

    //赋值
    washmachine1.brand = "海尔";
    washmachine2.brand = "小天鹅";

    //washmachine:引用变量,存了对象的地址——>实例化对象
    System.out.println(washmachine1.brand);
    System.out.println(washmachine2.brand);

    washmachine1.washClothes();
    washmachine2.washClothes();
}

注意:

1> 可以使用关键字new实例化多个对象;

2> 同一个类可以创建多个实例;

3> 使用 . 来访问对象中的属性和方法。

3.this引用

public class TestDate {
    public int year;
    public int month;
    public int day;
    public void setDate(int y,int m,int d){
        //谁调用了setDate,this就是谁
        this.year = y;
        this.month = m;
        this.day = d;
    }
    public void printDate(){
        //要习惯加上this
        System.out.println(this.year+"年"+this.month+"月"+this.day+"日");
    }

    public static void main(String[] args) {//main方法可以定义在类当中
        //定义
        TestDate testDate1 = new TestDate();
        TestDate testDate2 = new TestDate();
        TestDate testDate3 = new TestDate();
        //赋值
        testDate1.setDate(2000,2,28);
        testDate2.setDate(2022,12,21);
        testDate3.setDate(2023,3,12);
        //打印
        testDate1.printDate();
        testDate2.printDate();
        testDate3.printDate();
    }
}

注意:

1> this对应类型引用,哪个对象调用就是哪个对象的引用类型;

2> this只能在普通成员方法中使用,静态成员方法(static修饰)中不能使用

3> 在成员方法中,this只能引用当前对象,不能再引用其他对象;

4> this时成员方法第一个隐藏的参数,编译器会自动传递。

4.对象的构造及初始化

普通方法:返回值+方法名+(参数列表)+ {方法体}

构造方法:没有返回值且方法名必须和类名保持一致

//注意方法名与类名一致!!!
public TestDate(){
    System.out.println("没有参数的构造方法");
}
public TestDate(int year,int month,int day){ //两个方法构成了重载
    this.year = year;
    this.month = month;
    this.day = day;
    System.out.println("有3个参数的构造方法");
}

注意:

1> 构造方法可以重载(方法名均为类名);

2> 构造方法一个都没写的情况下,编译器会帮你默认生成一个不带参数的构造方法;但当你写了其中任意一种构造方法,其它构造方法编译器不会帮你生成;

3> 构造方法一定会被调用,具体调用哪个构造方法得看有没有相应的参数;

3> 一个对象的产生至少有以下2步:为对象分配内存,调用合适的构造方法;

4> idea自动生成构造方法:右键 + Generate + Constructor + 自选

5> 可在构造方法中使用this()来调用另一个构造方法且必须放在第一行,但是不能自己调用自己 。

class Student{
    public String name;
    public int age;
    public Student(){ //此为没有参数的构造方法
        this("wangwu",20);//this()必须放在第一行
        System.out.println("调用第一个");
        this.print();//利用this调用其他成员方法,可以不放在第一行
    }
    public Student(String name,int age){//此为有两个参数的构造方法
        this.name = name;
        this.age = age;
        System.out.println("调用第二个");
    }
    public void print(){
        System.out.println("姓名:"+this.name+"年龄:"+this.age);
        //注意这里不加this输出 姓名:null年龄:0
    }
}
public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();//调用上面第一个构造函数
        student1.name = "zhangsan";
        student1.age = 18;
        Student student2 = new Student("lisi",19);//调用上面第二个构造函数
        student2.print();
    }
}

【Java】类和对象,封装

5.封装

面向对象程序三大特性:封装、继承、多态。这里先介绍封装的概念。

定义:将类的实现细节进行隐藏,类外看不见数据,实现了类的安全性。

注意:defaule是什么都不写时的默认权限

访问限定符
No 范围 private default protected public
1 同一包中的同一类
2 同一包中的不同类 ×
3 不同包中的子类 × ×
4 不同包中的非子类 × × ×

//包的概念

定义:多个类收集在一起成为一组,称为软件包,类似于目录。

导入:可以让编译器自动导入,也可以手动导入。

通配符*:可以充当任何类。如util.* 不是导入util下的所有类,而是用到哪个类就用哪个类。

但是当使用的类在多个包中都有时,需要手动导入。非必要不用*。

自定义包:在文件最上方加上一个package语句指定改代码在哪个包中。

//如何访问

前面我们说了用private修饰之后,类外就不能使用类内的变量了,那无法访问有什么意义呢?别急,强大的idea可以帮我们用另一种方法访问:

class Student{
    private String name;//私有,无法在类外访问
    private int age;//同上

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("wangwu");//利用setName和getName访问
        System.out.println(student.getName());
        student.setAge(20);
        System.out.println(student.getAge());
    }
}

6.static成员

特点:1)修饰成员变量或方法,称为类变量/静态成员变量或类方法,不能修饰局部变量;

           2)不依赖对象,不需要new对象,所有对象共用一份

           3)静态方法内部不能调用非静态方法,不能使用this,无法重写;

           4)存储在方法区当中,生命周期伴随类的一生。

访问方式:虽然可以但是不建议通过对象来引用访问,而是通过类名访问

class Student{
    private String name;//普通成员变量,每个对象都有一份
    private int age;//普通成员变量
    public static String classroom = "301";//被static修饰,称为类变量/静态成员变量,所有对象共用一份

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public static void func() {
        System.out.println("func……");
    }
}
public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("zhangsan",20);
        Student student2 = new Student("lisi",21);
        Student student3 = new Student("wangwu",22);//这些对象都可以不new,不影响类变量和类方法的调用
        /*System.out.println("教室是"+student1.classroom);//结果是一样的
        System.out.println("教室是"+student2.classroom);
        System.out.println("教室是"+student3.classroom);*///虽然可以但是不建议通过对象来引用访问
        System.out.println("教室是"+Student.classroom);//而是通过类名直接访问;
        Student.func();
    }
}

7.代码块

分类:静态代码块实例代码块,同步代码块,普通代码块

注意:

1)顺序:静态代码块 > 构造代码块 > 构造方法 ;

2)静态代码块不管生成多少个对象,都只执行一次

3)如果一个类中包含多个静态代码块,编译器会按照顺序依次执行。

class Student {
    private String name = "lisi";
    private int age;
    {
        this.name = "zhangsan";//按顺序执行这一行代码,名字为zhangsan
        System.out.println("构造块!");
    }
    static {
        classroom = "201";
        System.out.println("静态代码块!");
    }
    public static String classroom = "208";//按顺序执行这一行代码,班级为208

    public Student() {
        System.out.println("调用不带参数的构造方法!");
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("调用带两个参数的构造方法!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(Student.classroom);//208
        System.out.println(student.getName());//zhangsan
    }
}

 【Java】类和对象,封装

8.对象的打印

编译器自己生成(方法重写):右键 + Generate + toString() + 自选

class Student {
    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override//方法重写,重写了toString方法
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public void print() {
        System.out.println("姓名:"+this.name+" 年龄:"+this.age);
    }
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student("zhangsan",20);
        System.out.println(student);//没重写时,打印student的地址
        student.print();//正常调用上面的成员方法
    }
}

 【Java】类和对象,封装


Over!继承和多态见!!文章来源地址https://www.toymoban.com/news/detail-432798.html

到了这里,关于【Java】类和对象,封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java 对象创建流程、this 关键字

    2024年02月12日
    浏览(32)
  • 【java面向对象中static关键字】

    【java面向对象中static关键字】

    static修饰成员变量 static修饰成员变量的应用场景 static修饰成员方法 static修饰成员方法的应用场景 static的注意事项 static的应用知识:代码块 static的应用知识:单例设计模式 static静态的意思,可以修饰成员变量,成员方法; static修饰成员变量: 1.有static修饰的成员变量叫做

    2024年02月13日
    浏览(12)
  • java面向对象——继承以及super关键字

    java面向对象——继承以及super关键字

    在 同⼀类 中,存在⽅法名相同,参数列表不同(个数、类型或顺序不同)的⽅法互为重载。 在 继承关系 中,⼦类声明⼀个继承⾃⽗类的⽅法名相同、参数列表相同,返回值类型⼀致,访问修饰符相同或 变⼤,抛出异常相同或缩⼩的⽅法称为重写。 重载是编译时多态,重写

    2024年02月12日
    浏览(8)
  • Java 面向对象 03 就近原则和this关键字

    Java 面向对象 03 就近原则和this关键字

    对于起名字需要见名知意,所以这个String n 不太合适: 但是如果将n改为name,会与第五行代码的name重复: 运行代码发现,获取后的姓名为默认值,是null 引入就近原则: 此处打印的是age=10,但是如果想使用成员位置的age ,应该使用this 代码: 运行结果: 使用this关键

    2024年01月21日
    浏览(11)
  • Java文件操作(遍历目录中的文件,找到并删除有指定关键字的文件)

    对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作         扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件         实际上题目就要求我们对一个指定的目录下的文件进行遍历

    2024年02月13日
    浏览(13)
  • 【Java基础教程】(十四)面向对象篇 · 第八讲:多态性详解——向上及向下转型、关键字 final与 instanceof的作用~

    【Java基础教程】(十四)面向对象篇 · 第八讲:多态性详解——向上及向下转型、关键字 final与 instanceof的作用~

    掌握final 的主要作用及使用; 掌握对象多态性的概念以及对象转型的操作; 掌握instanceof 的主要作用及使用; 在Java 中 final称为终结器,在Java 里面可以使用 final定义类、方法和属性,用于表示不可变性 。 final 类:当一个类被声明为 final 时,意味着该类不能被

    2024年02月16日
    浏览(46)
  • 我在VScode学Java类与对象(Java显式参数和隐式参数、静态方法+main方法、Java访问修饰符、static关键字、Java的包、对象数组)第三辑

    我在VScode学Java类与对象(Java显式参数和隐式参数、静态方法+main方法、Java访问修饰符、static关键字、Java的包、对象数组)第三辑

    我的个人博客主页:如果’\\\'真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习----可以参考我的这篇博客:《我在VScode学Java》 方法会操作对象并访问他们的实例字段。 在Java中,显式参数和隐式参数是方法调用中的两种不同类型的参数。 注释: 第7行: sum 方法的参数

    2024年02月16日
    浏览(51)
  • linux如何查询目录文件中是否包含某个关键字

    在 Linux 系统中,可以使用 grep 命令来查询目录文件中是否包含某个。 例如,如果你想查询当前目录下的所有文件中是否包含 \\\"keyword\\\",可以使用以下命令: 在这个命令中, . 表示当前目录, -r 表示递归地搜索目录下的所有文件。 如果有任何文件包含 \\\"k

    2024年02月11日
    浏览(10)
  • ES6中的Class关键字和super()方法,使用详细(class类和super()方法)

    简介:在ES6中,我们可以使用class来定义类,并通过 extends 实现类的继承,然后在子类中,我们可以使用 super() 来调用父类的构造函数;今天来分享下class的使用详细。 1、 首先,使用class,定义一个父类; 2、 然后再定义一个子类, 通过ex

    2024年02月12日
    浏览(16)
  • instanceof、对象类型转化、static关键字

    instanceof、对象类型转化、static关键字

    instanceof是判断一个对象是否与一个类有关系的   先看引用类型,再看实际类型 * 例子:obj instanceof A 先看obj的类型是否与A有关联,无关联则报错,有关联则判断obj的实际类型 因为obj的实际类型是son,所以String类与他无关,所以返回false 对象类型转换: 发生在父子之间

    2024年02月02日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包