类与对象

6.1类与对象的定义

6.1.1 类的定义

jshell> class Person {
   ...>  //属性
   ...>  public String name;        //姓名
   ...>  public char   sex;         //性别
   ...>  public int    age;         //年龄
   ...>  //方法
   ...>  public void speak(){       //说话
   ...>          System.out.println("姓名:"+name+",性别:"+sex+",年龄:"+age);
   ...>  }
   ...> }
|  已创建 类 Person

6.1.2 创建对象

jshell> Person p=new Person();   //定义对象
p ==> Person@6f1fba17

jshell> p.name="张三";           //访问属性
$34 ==> "张三"

jshell> p.sex='女';
$35 ==> '女'

jshell> p.age=20;
$36 ==> 20

jshell> p.speak();                //访问方法
姓名:张三,性别:女,年龄:20

jshell>

创建多个对象

jshell> Person q=new Person();   //定义对象
q ==> Person@5ae63ade

jshell> q.name="李四";           //访问属性
$39 ==> "李四"

jshell> q.sex='男';
$40 ==> '男'

jshell> q.age=21;
$41 ==> 21

jshell> q.speak();                //访问方法
姓名:李四,性别:男,年龄:21

jshell>

对象引用的传递

jshell> p=new Person();   //定义对象
p ==> Person@2b552920

jshell> p.name="王五";           //访问属性
$44 ==> "王五"

jshell> p.sex='男';
$45 ==> '男'

jshell> p.age=19;
$46 ==> 19

jshell> p.speak();                //访问方法
姓名:王五,性别:男,年龄:19

jshell>

6.2 封装性

6.2.1 存在问题

jshell> p.sex='女';
$48 ==> '女'

jshell> p.speak();
姓名:王五,性别:女,年龄:19

6.2.2 private属性

jshell> class Person {
   ...>  //属性
   ...>  private String name;        //姓名
   ...>  private char   sex;         //性别
   ...>  private int    age;         //年龄
   ...>  //方法
   ...>  public void speak(){       //说话
   ...>          System.out.println("姓名:"+name+",性别:"+sex+",年龄:"+age)
;
   ...>  }
   ...> }
|  已替换 类 Person
|    更新已替换 变量 q, 重置为空值
|    更新已替换 变量 p, 重置为空值

jshell>
jshell> p.sex='女';
|  错误:
|  sex 在 Person 中是 private 访问控制
|  p.sex='女';
|  ^---^

jshell>

6.2.3 访问控制

jshell> class Person {
   ...>  //属性
   ...>  private String name;        //姓名
   ...>  private char   sex;         //性别
   ...>  private int    age;         //年龄
   ...>  //普通方法
   ...>  public void speak(){       //说话
   ...>          System.out.println("姓名:"+name+",性别:"+sex+",年龄:"+age)
;
   ...>  }
   ...>  //以下是访问控制方法
   ...>  public String getName() {
   ...>          return name;
   ...>  }
   ...>  public void setName(String name) {
   ...>          this.name = name;
   ...>  }
   ...>  public char getSex() {
   ...>          return sex;
   ...>  }
   ...>  public void setSex(char sex) {
   ...>          this.sex = sex;
   ...>  }
   ...>  public int getAge() {
   ...>          return age;
   ...>  }
   ...>  public void setAge(int age) {  //写年龄控制
   ...>          if(age>=1&&age<=120)
   ...>                  this.age = age;
   ...>          else
   ...>                  System.out.println("age参数有误");
   ...>  }
   ...> }
|  已替换 类 Person
|    更新已替换 变量 q, 重置为空值
|    更新已替换 变量 p, 重置为空值

jshell>

正常访问

jshell> Person p=new Person();
p ==> Person@22a67b4

jshell> p.setName("张三");

jshell> p.setSex('女');

jshell> p.setAge(20);

jshell> p.speak();
姓名:张三,性别:女,年龄:20

jshell>
jshell> p.setAge(500);
age参数有误

jshell> p.speak();
姓名:张三,性别:女,年龄:20

jshell>

6.3 构造器

jshell> class Person {
   ...>  //属性
   ...>  private String name;        //姓名
   ...>  private char   sex;         //性别
   ...>  private int    age;         //年龄
   ...>  //构造器
   ...>  public Person(){
   ...>          System.out.println("默认无参构造器被调用!");
   ...>  }
   ...>  public Person(String name,char sex,int age){
   ...>          System.out.println("有参构造器被调用!");
   ...>          this.name=name;
   ...>          this.sex=sex;
   ...>          this.age=age;
   ...>  }
   ...>
   ...>  //普通方法
   ...>  public void speak(){       //说话
   ...>          System.out.println("姓名:"+name+",性别:"+sex+",年龄:"+age
);
   ...>  }
   ...>  //以下是访问控制方法
   ...>  public String getName() {
   ...>          return name;
   ...>  }
   ...>  public void setName(String name) {
   ...>          this.name = name;
   ...>  }
   ...>  public char getSex() {
   ...>          return sex;
   ...>  }
   ...>  public void setSex(char sex) {
   ...>          this.sex = sex;
   ...>  }
   ...>  public int getAge() {
   ...>          return age;
   ...>  }
   ...>  public void setAge(int age) {  //写年龄控制
   ...>          if(age>=1&&age<=120)
   ...>                  this.age = age;
   ...>          else
   ...>                  System.out.println("age参数有误");
   ...>  }
   ...> }
|  已替换 类 Person
|    更新已替换 变量 q, 重置为空值
|    更新已替换 变量 p, 重置为空值

jshell>
jshell> Person p=new Person();
默认无参构造器被调用!
p ==> Person@7c29daf3

jshell> Person q=new Person("刘六",'女',22);
有参构造器被调用!
q ==> Person@9660f4e

jshell> q.speak();
姓名:刘六,性别:女,年龄:22

jshell>

6.4 匿名对象

jshell> new Person("匿名对象",'男',18).speak();
有参构造器被调用!
姓名:匿名对象,性别:男,年龄:18

jshell>

6.5 JavaBean

jshell> class Point{
   ...>        private double x;
   ...>        private double y;
   ...>        public Point(){}
   ...>        public Point(double x,double y){
   ...>             this.x=x;
   ...>             this.y=y;
   ...>        }
   ...>        public double distance(Point p){
   ...>             double d=(this.y-p.getY())*(this.y-p.getY());
   ...>             d=d+(this.x-p.getX())*(this.x-p.getX());
   ...>             d=Math.sqrt(d);
   ...>             return d;
   ...>       }
   ...>  	  public double getX() {
   ...>          return x;
   ...>       }
   ...>       public void setX(double x) {
   ...>          this.x = x;
   ...>      }
   ...>   	  public double getY() {
   ...>          return y;
   ...>   	  }
   ...>   	  public void setY(double y) {
   ...>          this.y = y;
   ...>  	  }
   ...> }
|  已创建 类 Point

jshell> Point p=new Point();
p ==> Point@5622fdf

jshell> p.setX(0)

jshell> p.setY(0)

jshell> Point q=new Point(1,1);
q ==> Point@42e26948

jshell> p.distance(q)
$14 ==> 1.4142135623730951

jshell>

jshell>

6.6 方法重载

jshell> class Maths{
   ...>     //计算圆的面积
   ...>  public double area(double r){
   ...>         return 3.14*r*r;
   ...>     }
   ...>     //计算椭圆的面积
   ...>  public double area(double a, double b){
   ...>         return 3.14*a*b;
   ...>     }
   ...> }
|  已创建 类 Maths

jshell> new Maths().area(1);
$65 ==> 3.14

jshell> new Maths().area(2,3);
$66 ==> 18.84

jshell>

6.7 静态成员

jshell> class Maths{
   ...>     //计算圆的面积
   ...>  public static double area(double r){
   ...>         return 3.14*r*r;
   ...>     }
   ...>     //计算椭圆的面积
   ...>  public static double area(double a, double b){
   ...>         return 3.14*a*b;
   ...>     }
   ...> }
|  已替换 类 Maths

jshell> Maths.area(1);
$68 ==> 3.14

jshell> Maths.area(2,3);
$69 ==> 18.84

jshell>

6.8 包

默认情况下,JShell提供了一些常用包的导入 可以输入以下命令列出所有导入的包:

jshell> /imports
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*

jshell>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CentOS 7.x 安装Sublime Text 3.0正式版

    CentOS 7.x 安装Sublime Text 3.0正式版 Sublime Text 3.0 正式版终于发布了! 废话不多说,直接敲命令安装! 1、安装...

    程裕强
  • Hadoop基础教程-第9章 HA高可用(9.4 YARN 高可用)(草稿)

    第9章 HA高可用 9.4 YARN 高可用 9.4.1 RM单点故障 http://hadoop.apache.org/docs/r2.7.3/hadoop-...

    程裕强
  • Java Integer源码解读

    1、引言 public class IntegerDemo { public static void main(String[] args){ ...

    程裕强
  • Java入门系列-11-类和对象

    OOP(Object Oriented Programming) 面向对象编程,是一种编程架构思想,不是和对象面对面编程。

    享智同行
  • 拔掉机器人的一条腿,它还能学走路?| 三次元里优化的DRL策略

    量子位
  • vs2015:/utf-8选项解决UTF-8 without BOM 源码中文输出乱码问题

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • 《收获,不止SQL优化》 - 脚本积累集合 - 1

    《收获,不止SQL优化》这本书,有很多即用的脚本工具,或者根据自己的需求,改造重用,可以积累到自己的工具库中。

    bisal
  • Python SQLite常见异常及解决办法

    sqlite获取最大值一般使用max函数来获取,但是返回值一直是9。原因是因为该列字段值类型不是数值类型。 可以通过cast来改变字段值类型,使用以下语句解决...

    cutercorley
  • 机器学习你必须知道的几点知识

    读了两篇文章,第一篇是以前老师推荐的《A Few Useful Things to Know About Machine Learning》,里面介强调了几个机...

    机器学习AI算法工程
  • JNI--非静态native方法使用及c/c++调用Java变量

    aruba

扫码关注云+社区

领取腾讯云代金券