当前位置: 首页 > news >正文

Java—面向对象编程、类的基本语法

目录

1、类和对象

2、构造器

3、this关键字

4、封装

5、实体类/Javabean类

6、static关键字

1.static修饰成员变量

2.static修饰方法

3.static注意事项

7、面向对象编程的综合小项目


1、类和对象

面向对象编程:是Java的核心编程。

首先我们先了解一下什么是对象?

对象是一种特殊的数据结构,可以用来记住一个事物的数据,从而代表该事物。

我们了解了对象的结构那么我们怎么定义对象呢?

  • 先设计对象的模版,也就是对象的设计图:类。
  • 通过new关键字,每new一次就得到一个新对象。

1.类的基本结构:

[访问修饰符] class 类名 {// 成员变量(属性)[访问修饰符] 数据类型 变量名;// 构造器[访问修饰符] 类名(参数列表) {// 构造器体}// 成员方法(行为)[访问修饰符] 返回类型 方法名(参数列表) {// 方法体}
}

2. 访问修饰符

  • public:公共访问
  • private:私有访问
  • protected:受保护访问
  • 默认(不写):包级访问 

上面的修饰符我们后面再说。

3. 关键要素

  • 类名首字母大写,遵循驼峰命名法
  • 成员变量通常设为私有(private)以实现封装
  • 提供公共的 getter/setter 方法访问私有成员
  • 构造器名与类名相同,无返回类型
  • 方法按功能进行合理划分和命名

代码:基于Student类的实例

public class Student {//属性,成员变量String name;int age;double height;//无参构造器//方法public void print(){System.out.println(name + " " + age + " " + height);}
}

对象时什么?可以把对象看做一张二维表。

对象在计算机中是啥?

类对象小结:

   之前我们对面向对象编程做了解。我们知道面向对象的核心是要设计对象,设计对象就要设计类,所以接下来我们来学习设计类的一些语法

2、构造器

        构造器是一种特殊的方法,没有返回值(不需要写)名称和类名想同。在创建对象自动调用。

1. 构造器的定义

  • 构造器是一种特殊的方法,用于创建对象时初始化对象状态
  • 名称必须与类名完全相同
  • 没有返回类型连 void 都不写

2. 构造器的特点

  • 当使用 new 关键字创建对象时自动调用
  • 可以重载(一个类可以有多个构造器)
  • 如果没有显式定义构造器,Java会提供默认无参构造器

3. 构造器的优势

  • 简化对象创建过程
  • 确保对象在创建时就被正确初始化
  • 提高代码的可读性和安全性

注意事项:

  • 类默认就自带了一个无参构造器
  • 如果为类定义了有构造器,类默认的无参构造器就没有了,此时如果还想用无参数构造器,就必须自己写无参数构造器出来。如果只写有参构造器,当使用无参构造器时候就会报错。

下面图片就是一个构造器:无参数构造器

下面我们来看代码:

Student类

public class Student {String name;int age;double height;//有参数构造器public Student(String name , int age , double height){this.name = name;  //this语法还没学到这篇文章下面我们会提到this.age = age;this.height = height;}//无参构造器public Student(){System.out.println("无参构造器");}
}

Test类

public class Test {public static void main(String[] args) {// 创建Student对象并初始化基本信息Student s = new Student("张三",18,1.8);//打印student信息System.out.println(s.name + " " + s.age + " " + s.height);//无参数构造器创建Student对象Student s1 = new Student(); //在创建对象时打印:无参构造器//会发现打印出来的是默认值System.out.println(s1.name + " " + s1.age + " " + s1.height);}
}

3、this关键字

            this就是一个变量,可以用在方法中,来拿到当前对象。说白了那个对象调用这个方法,this就拿到那个对象。

            我们通过代码来理解上面这句话。

    Student类

    public class Student {public void print() {System.out.println(this);}
    }
    

    Test类

    public class Test {public static void main(String[] args) {// 创建Student对象并初始化基本信息Student s = new Student();s.print();System.out.println(s);}
    }
    

            通过打印发现上面两个的地址完全想同,s.print()和下面直接打印s对象的地址相同。说明s对象调用print方法,this就拿到那个对象(的地址)。那么这里this就是s对象。所以可以用this直接找到类中的成员变量。

    1. this 的含义

    • this 是一个引用当前对象的关键字
    • 在实例方法或构造器中,this 指向正在调用该方法或构造器的对象实例

    2. this 的主要用途

    • 区分成员变量和局部变量(解决变量名称冲突问题的)。

    主要用途解决名称冲突问题该怎么使用呢场景是什么?直接看代码注释比较详细

    Student类

    public class Student {String name;int age;double height;//无参构造器public Student(){}//带参构造器//打印public void print(){System.out.println(name + " " + age + " " + height);}//在定义方法或者构造器时,有时形参名字取起来比较容易和成员变量重名//这里使用this关键字来区分成员变量和形参public Student(String name,int age,double height){//这里使用this关键字来区分成员变量和形参//这里是形参赋值给形参自己
    //        name = name;这里是形参赋值给形参自己,成员变量name未被修改,不能完成赋值this.name = name;this.age = age;this.height = height;}
    }

    .Test类

    public class Test {public static void main(String[] args) {// 创建Student对象并初始化基本信息Student s = new Student("张三", 18, 1.8);s.print();}
    }

    4、封装

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

    类就是一种封装

    封装的设计要求

    合理隐藏,合理暴露

            如何隐藏:使用private关键字修饰成员变量,就只能在本类中被直接访问其他任何地方不能直接访问

    private关键字隐藏

    • private 是 Java 中的访问修饰符
    • 用于限制成员变量、方法或构造器的访问权限
    • 被 private 修饰的元素只能在定义它们的类内部访问

    下面来看代码如何隐藏,怎么使用。

    Student类

    public class Student {//属性,成员变量//如何隐藏:使用private关键字修饰成员变量,// 就只能在本类中被直接访问,其他任何地方不能直接访问private String name;private int age;private double height;//2、如何暴露(合理暴露):使用public修饰的get和set方法合理暴露成员变量//取值和赋值//设置值//为姓名赋值public void setName(String name){this.name = name;}//为年龄属性进行合理的限制public void setAge(int age){if (age >= 0 && age <= 120){this.age = age;}}//为身高属性进行合理的限制public void setHeight(double height){if (height > 0.5 && height < 2.5){this.height = height;}}//取值public String getName(){return name;}public int getAge(){return age;}public double getHeight(){return height;}//方法public void print(){System.out.println(name + " " + age + " " + height);}
    }

    Test类

    public class Test {public static void main(String[] args) {// 创建Student对象并初始化基本信息Student s = new Student();s.setName("张三");s.setAge(18);s.setHeight(1.8);s.print();}
    }

    5、实体类/Javabean类

    什么叫实体类?

    是一种特殊类,类中要满足如下需求

    public class Student {//属性,成员变量//如何隐藏:使用private关键字修饰成员变量,// 就只能在本类中被直接访问,其他任何地方不能直接访问private String name;private int age;private double height;//2、如何暴露(合理暴露):使用public修饰的get和set方法合理暴露成员变量//取值和赋值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 double getHeight() {return height;}public void setHeight(double height) {this.height = height;}//构造器public Student() {}
    }

    实体类有啥应用场景?

    下面我们在写一个StudentOperator类来负责对Student类的操作。

    下面我们来看一下总的代码:

    Student类,学生类Javabean类包含私有的成员变量和get、set方法。

    public class Student {//属性,成员变量//如何隐藏:使用private关键字修饰成员变量,// 就只能在本类中被直接访问,其他任何地方不能直接访问private String name;private int age;private double height;//2、如何暴露(合理暴露):使用public修饰的get和set方法合理暴露成员变量//取值和赋值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 double getHeight() {return height;}public void setHeight(double height) {this.height = height;}//构造器public Student() {}
    }

    StudentOperator类:用于处理Student类定义的对象的操作一些方法。体现了Java中的分层思想。

    public class StudentOperator {//我们来写一个类处理Student类创建的对象那我们必须拿到这个对象?//我们现在就需要考虑怎么拿到这个对象private Student s;//用于记住将来操作的学生对象。此时还为null//我们掩考虑怎么把象传递给这个上面的s中?//可以使用有参构造器//构造器public StudentOperator(Student s){this.s = s;}//无参构造器public StudentOperator(){}public void printNamaAndAge(){System.out.println("姓名:" + s.getName() + " 年龄:" + s.getAge());}public void printNamaAndHeight(){System.out.println("姓名:" + s.getName() + " 身高:" + s.getHeight());}
    }
    

    Test类:用于测试Student类。

    public class Test {public static void main(String[] args) {// 创建Student对象并初始化基本信息Student s = new Student();s.setName("张三");s.setAge(18);s.setHeight(1.8);StudentOperator so = new StudentOperator(s);so.printNamaAndAge();so.printNamaAndHeight();}
    }

    6、static关键字

    static关键字,翻译过来叫静态,可以修饰成员变量,成员方法

    1.static修饰成员变量

    成员变量按照有无Static修饰,分为两种:

    • 静态变量(类变量):有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。
    • 实例变量(对象的变量):无static修饰,属于每个对象

    主要特性
    1. 静态变量(类变量)

    • 使用 static 修饰的变量
    • 在内存中只有一份拷贝,被所有实例共享
    • 可以通过类名直接访问:ClassName.variableName

    2. 静态方法

    • 使用 static 修饰的方法
    • 可以通过类名直接调用:类名.静态成员变量/静态方法
    • 只能直接访问静态成员,不能访问非静态成员

    3. 静态代码块

    • 用于初始化静态变量
    • 在类第一次被加载时执行,且只执行一次

    成员变量的执行原理:

    接下来看代码:

    Student类

    public class Student {static String name;int age;
    }

    Test类

    public class Test {public static void main(String[] args) {//类名.静态变量(推荐)Student.name = "张三";System.out.println(Student.name);//对象名.静态变量(不推荐)Student s1 = new Student();s1.name = "李四";Student s2 = new Student();s2.name = "王五";System.out.println(s1.name);  //这里打印的也是王五,计算机里只有一份,会被类的全部对象共享。System.out.println(Student.name);//实例变量的用法//对象名.实例变量s1.age = 18;s2.age = 19;System.out.println(s1.age);System.out.println(s2.age);
    //        System.out.println(Student.age);//报错,因为实例变量只能通过对象访问}
    }

    静态变量的使用场景(案例)

            如果某个数据只需要一份,且能够被共享(访问、修改),则该数据可以定义成静态变量来记住。

    下面还是来看代码理解上面的例子:

    User类

    public class User {public static int count;//构造器public User(){//在类的内部使用成员变量可以直接使用//或者说,访问自己类的成员变量,是可以省略类名的。count++;}
    }

    Test类

    public class Test {public static void main(String[] args) {new User();new User();new User();new User();System.out.println(User.count);//4}
    }
    

    2.static修饰方法

    修饰成员变量按照有无staict分为两类:

    • 静态方法:有static修饰的成员方法,这个方法属于类。

    • 实例方法: 无static 修饰的成员方法,属于对象。


    特点:

    • 使用 static 关键字修饰
    • 属于类本身,不依赖于类的实例
    • 可以通过类名直接调用:类名.方法名()
    • 在内存中只有一份,在类加载时就存在

    限制:

    • 不能直接访问实例变量和实例方法
    • 不能使用 this 和 super 关键字
    • 只能直接访问其他静态成员

    下面来看代码:

    Student类

    public class Student {private  int age;public static void printHalloWorld(){System.out.println("Hallo World");System.out.println("Hallo World");System.out.println("Hallo World");}public void printPass(){if(age > 0 && age < 50){System.out.println("输入合理");}else{System.out.println("输入错误");}}public void setAge(int age){this.age = age;}
    }

    Test类

    public class Test {public static void main(String[] args) {//类名.方法名(推荐)Student.printHalloWorld();//对象名.方法名(不推荐)Student s1 = new Student();s1.printHalloWorld();//实例方法 对象名.方法名s1.setAge(20);s1.printPass();//规范:如果这个方法为了做一个功能且不需要直接访问对象的数据,这个方法直接定义成静态方法//如果这个方法是对象的行为,需要访问对象的数据,这个方法必须定义成实例变量}
    }
    

    静态方法的使用场景:

    Student类

    public class verifyCodeUtil {
    //构造器定义成私有private verifyCodeUtil(){}public static void getVerifyCode(){String verifyCode = "";for (int i = 0; i < 4; i++){int number = (int)(Math.random() * 10);verifyCode += number;}System.out.println(verifyCode);}
    }
    

    工具类

    public class Test {public static void main(String[] args) {verifyCodeUtil.getVerifyCode();}
    }
    

    为什么工具类中的方法要用静态方法,而不用实例方法?

    3.static注意事项

    • 静态方法实例方法访问相关的几个注意事项

    Test类

    public class Test {public static void main(String[] args) {//静态变量}//静态变量public static int count = 10;//实例变量public int a = 10;//静态方法public static void test() {System.out.println(count);
    //        System.out.println(a); //报错,静态方法不能访问实例变量
    //        System.out.println(this);//报错,静态方法不能访问this}//实例方法public void test1() {//实例方法可以访问静态变量和实例变量System.out.println(count);System.out.println(a);System.out.println(this);}
    }
    

    7、面向对象编程的综合小项目

    Movie类

    public class Movie {private int id;private String name;private double price;private String actor;//构造器public Movie(){}public Movie(int id, String name, double price, String actor) {this.id = id;this.name = name;this.price = price;this.actor = actor;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}
    }
    

    MovieOperator类

    public class MovieOperator {private Movie[] movies;//构造器public MovieOperator(Movie[] movies) {this.movies = movies;}public void printAllMovies() {for (int i = 0; i < movies.length; i++) {System.out.println("id" + movies[i].getId()+"name->:" + movies[i].getName() +"price->" +movies[i].getPrice() +"actor->" +movies[i].getActor());}}public void searchMovieById() {System.out.println("请输入要查询的id");Scanner sc = new Scanner(System.in);int e = sc.nextInt();for (int i = 0; i < movies.length; i++) {if (movies[i].getId() == e) {System.out.println("id" + movies[i].getId()+"name->:" + movies[i].getName() +"price->" +movies[i].getPrice() +"actor->" +movies[i].getActor());return;}}System.out.println("没有找到该电影");}}

    Test类

    public class Test {public static void main(String[] args) {//1、设计电影类Movie,以便创建电影对象,封装电影数据//2、封装系统中的全部电影信息,并保存在数组中(自己造)Movie []movies = new Movie[6];movies[0] = new Movie(1,"唐顿庄园",6.5,"罗宾·怀特");movies[1] = new Movie(2,"速度与激情",9.5,"瑞秋");movies[2] = new Movie(3,"夏洛特烦恼",9.5,"沈腾");movies[3] = new Movie(4,"战狼2",7.5,"吴京");movies[4] = new Movie(5,"让子弹飞",8.5,"姜武");movies[5] = new Movie(6,"暗战",9.1,"王大陆");//3、创建电影操作对象出来,专门负责电影数据的业务操作。MovieOperator mo = new MovieOperator(movies);System.out.println("------------------全部电影信息如下----------------");mo.printAllMovies();System.out.println("------------------所查询的电影-------------");mo.searchMovieById();}
    }

            上面的代码利用了对象的声明和初始化,其实和基本类型的数组没有什么差别。只是数组中元素比变为数组中的每个元素只是对象引用,而非实际对象实例。

            OK文章到这里就结束了,作者能力有限。如果文章出现错误或者歧义欢迎大家在评论区指出。

    http://www.dtcms.com/a/522087.html

    相关文章:

  • 鞍山新款网站制作哪家好小程序平台入口
  • 做债的网站永久免费建站地址
  • 品牌网站建设意义网站内容与模板设计
  • 深圳制作网站专业wordpress移动底部菜单插件
  • 注册网站需要房产证网站开发交易网站
  • 建设工程规划许可证网站Wordpress 修改 mysql 插件
  • 网站建设的基本流程可分为企业文化网站建设
  • 国内最好的网站建设网店推广的重要性
  • 重庆交通大学官网网站深圳网站建设公司服务
  • 住房城乡与建设厅网站angular适合 做 网站吗
  • 网站开发的几种语言让wordpress文章页面显示分类标签
  • SOAP Body 元素
  • 为企业规划网站注意什么建设营销网站多少钱
  • wordpress 整站下载网站设计开发文档模板下载
  • 合肥网站建设技术托管举报网站建设情况 汇报
  • 阿里云网站建设认证答案做网站guangxiyanda
  • 动态购物网站开发源代码wordpress 预定插件
  • 太原百度seo网站建设wordpress设置首页
  • 付费网站怎么做专业网站制作的地方
  • 冷饮店怎么做网站网站怎么做留言
  • 网站建设佰首选金手指六wordpress卡
  • 网站开发的工作要求怎么把网站设置为信任网站
  • 网站建设东莞长安镇燃灯seo
  • 河南郑州做网站的公司免费咨询律师在线
  • 网站建设 国际 深圳大型网站权限设计
  • word如何做网站营销推广软件
  • 用dw可以做网站吗广告设计公司实践报告
  • 网站制作素材图片杭州专业做网站公司
  • 东莞优化网站关键词优化帮忙做简历的网站
  • 网站怎么做必须交钱吗免费传奇网站免费传奇