Java-day06(面向对象-2)

面向对象

参数

参数分为形参(方法声明时的参数)与实参方法调用时实际传给形参的参数值

将对象作为参数传递给方法

(1)定义一个Circle类,包含一个double型是r属性代表圆的半径,一个findArea()方法返回圆的面积。

class Circle{    
	double r;
	public double findArea(){
		return r * 3.14 * 3.14;
	}

}

(2)定义一个类PassObject,在类中定义一个方法printArea(),定义如下:

public void printArea(Circle c,int time )    

在printArea方法中打印1到time之间的半径(整数)及对应的圆面积。
在main方法中调用printArea()方法,调用完毕后输入当前半径值。
在这里插入图片描述

class Circle{             
	double radius;
	public double findArea(){
		return radius * Math.PI * Math.PI;
	}
	public void setRadius(double r){
		radius = r;
	}
	public double getRadius(){
		return radius;
	}
}

class PassObject{
	public void printArea(Circle c,int time){ 
		System.out.println("开始啦!");
		for(int i = 1;i <= time;i++ ){
			c.setRadius(i);
			System.out.println(c.getRadius() + "\t" + c.findArea());
		}
	}
	public static void main(String[] args){
		//对象实例化
		PassObject p = new PassObject();
		Circle c = new Circle();
		//调用方法
		p.printArea(c,5);
		System.out.println("当前半径为:" + c.radius);
	}
}
参数传递
  1. Java里方法的参数传递只有一种:值传递(将实际参数值的副本传入方法内,参数本身不受影响)
  2. 形参是基本数据类型,值传递时,实参会将其值传递给形参的基本数据类型的变量
  3. 形参是引用数据类型,值传递时,实参会将其内存地址传递给形参的引用数据类型的变量
public class Test2 {                                     
    public static void main(String[] args) {
		Test2 t = new Test2();
		t.first();
	}
	public void first(){
		int i = 5;
		Value v = new Value();
		v.i = 25;
		second(v,i);
		System.out.println(v.i);//20
	}
	public void second(Value v,int i){
		i = 0;
		v.i = 20;
		Value val = new Value();
		v = val;
		System.out.println(v.i + " " + i);//50 0
	}
}	
class Value{
	int i = 50;
}	
可变个数的形参

在这里插入图片描述

  • 可变个数的形参的方法和同名的方法之间构成重载
  • 可变个数的形参在调用时,个数从0开始,到无穷多个都行
  • 使用可变个数的形参的方法与使用数组的形参的方法是一致的(相同类型的数组的形参与可变个数的形参会·被认为是相同)
  • 可变个数的形参一定要放在不可变参数的后面(即int i,String ... args
  • 在一个方法中,只能有一个可变个数的形参

public class Test1 {              
    public static void main(String[] args) {
		Test1 t = new Test1();
		t.hello();
		t.hello(new String[]{"hello China","hello math","hello English"});//优先调用的可变个数的形参
		t.hello("hello 1","hello 2","hello 3");   //调用的可变个数的形参
		t.hello(1,"hello 2","hello 3");
	}
	//以下方法构成重载
	public void hello(){
		System.out.println("hello,world!");
	}
	//可变个数的形参
	public void hello(String ... args){
		for(int i = 0;i < args.length;i++){
			System.out.println(args[i] + "!");
		}
	}
	public void hello(int i,String ... args){
		System.out.println(i);
		for(int j = 0;i < args.length;j++){
			System.out.println(args[j] + "???");
		}
	}
	public void hello(int[] args){
		for(int i = 0;i < args.length;i++){
			System.out.println(args[i]);
		}
	}
}

匿名类对象

  1. 创建的类的对象是匿名的
  2. 当只需要调用一次类的对象时,就可以考虑使用匿名的方式创建类的对象
  3. 匿名类对象只能使用一次。

正常情况

PassObject p = new PassObject();     
Circle c = new Circle();
//调用方法
p.printArea(c,5);

使用匿名类对象

p.printArea(new Circle(),5) 

构造器(构造方法 constructor)

作用

  1. 创建对象

  2. 给创建的对象的属性赋值

设计类时

  • 若不显示声明类的构造器,程序会默认提供一个空参的构造器(构造器名需与所在的类名一致)
  • 一旦显示声明类的构造器,程序默认的构造器就不会再提供
  • 声明类的构造器的格式:权限修饰符 类名(形参){}
  • 类的多个构造器可以构成重载
  • 类对象的属性赋值的先后顺序:属性默认初始化 > 属性的显性初始化 >通过构造器给属性初始化 > 通过"对象.方法"的方式给属性赋值
public class Test3 {                         
    public static void main(String[] args) {
		//Person p = new Person(); //Person()即为空参的构造器
		Person p = new Person("春花", 22);
		System.out.println(p.getName());
	}
}

class Person{ 
	private String name;
	private int age;
	//构造器
	public Person(String n){
		name = n;
		age = a;
	}
	public Person(String n,int a){
		name = n;
		age = a;
	}
	public String getName(){
		return name;
	}
	public String getAge(){
		return age;
	}
}

练习
题一
在这里插入图片描述
题二
在这里插入图片描述

2.面向对象的三大特征:封装,继承,多态

封装与隐藏

将类的属性似有化,提供公共的方法(setter & getter)来实现调用

  • 当创建类的对象后,如果直接通过"对象.属性"的方式来赋值,可能会出现不满足实际的意外;而通过"对象.方法"的方式来控制对象对属性的访问,就能满足实际需求。
  • private 修饰的属性,只能在本类中被调用,出了此类,就不能被调用。
public class Test3 {               
    public static void main(String[] args) {
		zoo z = new zoo();
		z.setAge(4);
		z.setName("二狗");
		z.info();
		//编译不通过(属性被私有化)
		z.name = "春花";
		
	}
}

class zoo{ 
	//属性私有化(不能直接被调用属性)
	private String name;
	private int age;

	public void info(){
		System.out.println("name: " + name + "   age: " + age);
	}

	public void setAge(int i){
		if(i > 0 && i < 200){
			age = i;
		}else{
			System.out.println("输入错误");
		}
	}
	public void setName(String i){
		name = i;
	}
	
	public String getName(){
		return name;
	}
	public String getAge(){
		return age;
	}
}

访问权限修饰符(4种)

在这里插入图片描述

权限从大到小:public protected 缺省 private

练习

题一
在这里插入图片描述
题二
在这里插入图片描述

感谢大家的支持,关注,评论,点赞!
参考资料:
尚硅谷宋红康20天搞定Java基础上部
87

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/62123.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

static关键字

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 被static修饰意味什么 在Java中&#xff0c;被st…

ld加上-static -lc参数报错`ld: cannot find -lc`处理方法

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;as --version看到as的版本是2.27-34.base.el7&#xff0c;ld --version看到ld的版本是2.27-34.base.el7。 absCallWithStart.s里边…

33.利用abs 解决绝对值问题(matlab程序 )

1.简述 abs函数的功能是绝对值和复数的模 语法 Y abs(X) 说明 Y abs(X) 返回数组 X 中每个元素的绝对值。如果 X 是复数&#xff0c;则 abs(X) 返回复数的模。 示例 标量的绝对值 y abs(-5) y 5 向量的绝对值 创建实值的数值向量。 x [1.3 -3.56 8.23 -5 -0.01…

MacOS上用docker运行mongo及mongo-express

MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 前提 要求…

ChatGPT: 人机交互的未来

ChatGPT: 人机交互的未来 ChatGPT背景ChatGPT的特点ChatGPT的应用场景结论 ChatGPT ChatGPT是一种基于大数据和机器学习的人工智能聊天机器人模型。它由国内团队发明、开发&#xff0c;并被命名为Mental AI。ChatGPT的目标是通过模拟自然对话的方式&#xff0c;提供高效、智能…

vscode中无法使用git解决方案

1 首先查看git安装目录 where git 2 找到bash.exe 的路径 比如&#xff1a;C:/Users/Wangzd/AppData/Local/Programs/Git/bin/bash 3 找到vscode的配置项setting.json 4 添加 "terminal.integrated.shell.windowns": "C:/Users/Wangzd/AppData/Local/Pr…

SpringBoot中Redis报错:NOAUTH Authentication required

1、问题 org.springframework.dao.InvalidDataAccessApiUsageException: NOAUTH Authentication required.; nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required. … 2、解决 如果提供了密码还没解决&#xff0c;那可能是…

【剑指Offer 06】从尾到头打印链表,Java解密。

LeetCode 剑指Offer 75道练习题 文章目录 剑指Offer&#xff1a;从尾到头打印链表示例&#xff1a;限制&#xff1a;解题思路&#xff1a; 剑指Offer&#xff1a;从尾到头打印链表 【题目描述】 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用…

2023华数杯数学建模竞赛选题建议

提示&#xff1a;DS C君认为的难度&#xff1a;C<B<A&#xff0c;开放度&#xff1a;B<A<C 。 A题&#xff1a;隔热材料的结构优化控制研究 A题是数模类赛事很常见的物理类赛题&#xff0c;需要学习不少相关知识。 其中第一问需要建立平纹织物整体热导率与单根纤…

K8S系列文章之 开源的堡垒机 jumpserver

一、jumpserver作为一款开源的堡垒机&#xff0c;不管是企业还是个人&#xff0c;我觉得都是比较合适的&#xff0c;而且使用也比较简单。 二、这里记录一下安装和使用过程。 1、安装&#xff0c;直接docker不是就行 version: 3 services:xbd-mysql:image: mysql:8.0.19restart…

通过C语言设计的贪吃蛇游戏(控制台终端)

一、项目介绍 当前通过控制台终端实现一个贪吃蛇小游戏&#xff0c;实现游戏的绘制、更新、控制等功能。 二、实现效果 三、完整代码 下面贴出的代码在Windows系统上编译运行&#xff0c;需要使用conio.h头文件中的getch()函数来获取键盘输入&#xff0c;用于控制蛇的移动。…

word转pdf两种方式(免费+收费)

一、免费方式 优点&#xff1a;1、免费&#xff1b;2、在众多免费中挑选出的转换效果相对较好&#xff0c;并且不用像openOffice那样安装服务 缺点&#xff1a;1、对字体支持没有很好&#xff0c;需要安装字体库或者使用宋体&#xff08;对宋体支持很好&#xff09;2、对于使…

如何使用大模型处理生活繁琐的工作

如果每封电子邮件、每个带有订单、发票、投诉、录用请求或工作申请的 PDF 都可以翻译成机器可读的数据&#xff0c;会怎样&#xff1f;然后可以由 ERP / CRM / LMS / TMS 自动处理吗&#xff1f;无需编程特殊接口。 听起来很神奇&#xff1f;它确实有一些魔力。但最近已成为可…

PtahDAO:全球首个DAO治理资产信托计划的金融平台

金融科技是当今世界最具创新力和影响力的领域之一&#xff0c;区块链技术作为金融科技的核心驱动力&#xff0c;正在颠覆传统的金融模式&#xff0c;为全球用户提供更加普惠、便捷、安全的金融服务。在这个变革的浪潮中&#xff0c;PtahDAO&#xff08;普塔道&#xff09;作为全…

系列二、IOC基本概念和底层原理

一、IOC基本概念 控制反转&#xff1a;把对象创建和对象之间的调用过程&#xff0c;交给Spring进行管理&#xff1b;使用IOC的目的&#xff1a;减低耦合度&#xff1b; 二、IOC底层原理 xml解析 工厂模式 反射 2.1、图解IOC底层原理 # 第一步&#xff1a;xml配置文件&am…

K8s的详细介绍

1.编写yaml文件的方式 2.yaml里面的内容介绍 Pod实现机制&#xff1a;&#xff08;1&#xff09;共享网络&#xff08;2&#xff09;共享存储 共享网络:通过Pause容器&#xff0c;把其他业务容器加入到Pause容器里面&#xff0c;让所有业务容器在同一个名称空间中&#xff0c;…

【CHI】(六)独占访问

AMBA5 CHI Architecture Specification IssueF 1. overview 独占访问的原则是&#xff0c;执行独占序列的逻辑处理器&#xff08;LP&#xff09;执行以下操作&#xff1a; 对一个地址执行exclusive load。计算要存储到该位置的新值。对该地址进行exclusive store。 支持对可…

mysql-数据库-创建列表

一.创建列表 1..首先&#xff0c;进入mysql数据库 -->mysql -uroot -p 2. 其次&#xff0c;mysql默认的数据库类型为mydb&#xff0c;这时候&#xff0c;就得查看现在使用的类型 mysql> select database(); 3. 如果创建的类型不同&#xff0c;则使用create database …

Vue如何定义router-link的颜色样式

今天在使用Vue的时候碰到了想改样式却改不了的情况 <ul> <li>xxxxx</li> <li><router-link to"/wisdom" active-class"ative">xxxxx</router-link></li> <li><router-link to"/MyLogin" act…

【宝藏系列】几款好用的 Spring Boot 内置工具类

【宝藏系列】几款好用的 Spring Boot 内置工具类 文章目录 【宝藏系列】几款好用的 Spring Boot 内置工具类断言对象字符串集合文件资源IO 流反射AOP&#x1f349;文末推荐【深入浅出Java虚拟机】 断言 断言是一个逻辑判断&#xff0c;用于检查不应该发生的情况 Assert 关键字…