java中的oop(二)、方法、对象数组、重载、参数.

2024-05-09 13:20

本文主要是介绍java中的oop(二)、方法、对象数组、重载、参数.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

public class Person {/*成员变量存储在堆中*/String name;int age;public void sleep() {String hour = "18小时"; //局部变量;存储在栈中;System.out.println("he is sleepping!");}public void setAge(int age) {   //局部变量--形式参数;}public int getInt() {return 1;}public String getName() {return name;}
}
public class Students {public static void main(String[] args) {Person lily = new Person();lily.age = 15;lily.name = "lily";System.out.println("lily" + lily.age);}
}

方法

public class Method {public static void main(String[] args) {Person p1 = new Person();int int1 = p1.getInt();System.out.println(int1);}
}

方法:(函数、面向过程)

抽象出一个公共方法,减少冗余;

1、声明:
权限修饰符 [其他修饰符] 返回值类型 方法名(形参列表)throw 异常类型】 {方法体;
}
方法头(){方法体;
}

2、权限修饰符:

private、缺省、protected、public;

3、返回值类型:void/

(1)其他类型需配合return使用;

4、方法名

(1)

5、变量列表:

(1)局部变量、可以是多个;

(2)格式:(类型1 形参1, 类型2 形参2)

6、一个方法中可以调用另一个方法;

7、方法内不能定义方法;

关键字 return;

1、结束一个方法;

2、结束一个方法,并返回一个值(结果);

对象数组

Public class student {String name;
}
Student[] studentArr = new Student[10];
for (int i = 0; i < studentArr.length; i++) {studentArr[i].name = "name" + i;studentArr[i].age = i;
}

重载

方法名一样,参数不同;

类似很多工具类里面的同名不同参的方法;

1、定义

(1)同一个类中,多个同名方法,参数列表不同;

2、两同一不同

(1)同类、同方法

(2)参数不同:个数不同,类型不同;顺序不同;

(3)注意:与返回值类型等其他的无关;

/*both methods have same erasure*/
public void add(String str){}
public String add(String str) {}

3、同一个类中不允许两个同样的方法;

(1)同名不同参数,不是同样的方法;

(2)编译器认为是两个方法;

Int[] arr = new int[]{1,2,3};
Arr; //0xaavv// 地址值;
Char[] arr2 = new char[] {‘a’, ’b’, ’c’}
Sout(arr2);// abc;// 因为sout方法重载了char数组;
public class Overload {public static void main(String[] args) {Overload overl = new Overload();overl.add("");overl.add(1,2);overl.add((double)1,2);overl.add(1,2,3);}public void add(int i, int j){}public double add(double i, double j){return 1.1;}public  void add(int i, int j, int k){}public void add(String str){}/*both methods have same erasure*/
//    public String add(String str) {
//
//    }/*** =======*/
}
可变个数形参方法 见代码Args_20230718_;

说明:在调用方法时,参数个数可以为0/1/2/3/4.。。。
链接

public class Args2_20230718 {public static void main(String[] args) {Args2_20230718 args2 = new Args2_20230718();args2.link("_");args2.link("_", "healthy", "zhang");}void link(String str, String... strs) {String res = "";for (int i = 0; i < strs.length; i++) {res = res + strs[i] + str;}System.out.println(res);}
}

同一个类中,也可以构成重载;

特例:数组类型的不可以和可变形参重载;
可变个数的形参必须是最后一个参数;

参数传递

值传递机制:

基础数据类型,值传递

引用数据类型,传递的是地址值;
对象类型这样写,传递的也是地址值;

Order order1 = new Order();
Order order2 = order1;

可变参数个数方法:(js中的剩余参数)

public class ValueTransfer {public static void main(String[] args) {
//        基础类型的局部变量;int m = 1;int n = 1;m++;System.out.println(m + "," + n);/*引用类型的局部变量*/int[] arr1 = new int[]{1,2,3,4,5};int[] arr2 = arr1;  //传递地址值;arr2[0] = 10;System.out.println(arr1[0] + "," + arr2[0]);System.out.println("=====对象类型======");/*对象类型*/Order order1 = new Order();System.out.println(order1.orderId);order1.orderId = 1;System.out.println(order1.orderId);System.out.println("=====order2======");Order order2 = new Order();order1.orderId = 1;System.out.println(order2.orderId);order2.orderId = 2;System.out.println(order2.orderId);System.out.println("=====order3======");Order order3 = order2;      //传递的也是地址值;System.out.println(order3.orderId);order3.orderId = 222;System.out.println(order3.orderId);System.out.println(order2.orderId);}
}class  Order{int orderId;
}
public class ValueTransfer2 {public static void main(String[] args) {ValueTransfer2 transfer2 = new ValueTransfer2();/*基础数据类型,值传递;*/int m = 1;transfer2.add(m);System.out.println(m);  //1;/*引用类型传递地址值*/int[] arr = new int[] {1,2,3};transfer2.add(arr);System.out.println(arr[0]); //2;System.out.println("=====对象类型======");Order2 order2 = new Order2();/*引用类型传递地址值*/System.out.println(order2.id);  //0;transfer2.add(order2);System.out.println(order2.id);  //1;}public void add(int i) {i++;}public void add(int[] arr) {arr[0]++;}public void add(Order2 order2) {order2.id++;}
}class Order2{int id;
}
public class Person {public static void main(String[] args) {Animal ani = new Animal();ani.setLegs(1);
//        System.out.println(ani.legs); 设置为private之后不可这样调用;System.out.println(ani.getLegs());//设置为private之后需要这样调用;}
}
class Animal{String name;/*私有化*/private int legs;public void setLegs(int l) {if(legs >= 0) {legs = l;
//            this.legs = l;}}public int getLegs() {return legs;}public void eat() {System.out.println("eat");}
}
public class Args {public static void main(String[] args) {Args arg = new Args();arg.getInt();arg.getInt(1);arg.getInt(2, 1);
//        arg.getInt(1,2, 1,4);}/*可变个数的形参方法*/public void getInt(int ... nums){System.out.println(11111);for (int i = 0; i < nums.length; i++) {System.out.print(nums[i]);}}/*可变个数的形参必须是最后一个参数;*/public void getInt(int i, int ... nums) {System.out.println(4444444);}
//    public void getInt(int[] nums) {};//'getInt(int[])' is already defined in 'com.healthy.zhang.overload20230717.Args'public void getInt(int i, int j) {System.out.println(2222);}public void getInt(int i) {System.out.println(3333);}}

递归方法

直接递归:直接自己调用自己;
间接递归:A調B;B调c,C调A;
隐式循环;

递归占用内存较多,比循环要慢;如果能用循环不用递归;

public class Recursion {public static void main(String[] args) {int n = 10;int r = recur(n);System.out.println(r);}static int recur(int n) {if(n<=1) {return n * 1;}return n * recur(n-1);}
}

这篇关于java中的oop(二)、方法、对象数组、重载、参数.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973527

相关文章

SpringMVC+Hibernate +MySql+ EasyUI实现CRUD

SpringMVC+Hibernate +MySql+ EasyUI实现CRUD 原文地址 http://my.oschina.net/xshuai/blog/345117

企业支付宝账号开发接口教程--JAVA-UTF-8(实际操作完善中...SpringMVC+JSP)

关于即时到账的开发。审核通过。简单测试如下。 希望看的可以收藏或者赞一下哦。 1.拥有自己的支付宝企业账号。去产品商店选择适合自己的方案。并签约合同。 2.选择合适的商家收款产品并去签约。填写相应的信息 3.在商家服务会有PID和KEY是关键的东西。 4.选择自己签约的产品类型,下载对应的接口api与测试代码 即时到账收款 --alipaydirect 网银支付 -

微信OAuth授权获取用户OpenId-JAVA(个人经验)

个人微信小程序 可扫码体验 本文更新有可能先在开源中国。地址为:https://my.oschina.net/xshuai/blog/293458 https://open.weixin.qq.com/ 这个是授权登陆自己网站的和我的这个是有区别的。 带评论昵称  才同意加QQ ‍鉴于老是有人问我。就更新一下了。 更新时间 2016年10月18日 修改了测试号权限不足导致授权获取信息抛

Discuz! Ucenter API for JAVA

my.oschina.net/xshuai/blog/280242原文地址  Discuz! Ucenter API for JAVA   使用自己的项目于discuz联合登陆注册。 源码和jar文件都在http://code.google.com/p/discuz-ucenter-api-for-java/  有。 我只测试了非中文的注册。中文注册可以去http://code.goog

有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。

discuz-ucenter_api_for_java 有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。 所有的代码 1.UC.java package com.fivestars.interfaces.bbs.api;import java.io.IO

2014年5月3日整理java笔试题+答案和自己的代码

一.选择题(每题1分) 1. jsp 有几个内置对象?( )(单选) A 5个 B 6个 C 9个 D 8个 2. 在JAVA中,如何跳出当前的多重嵌套循环?( ) (多选) A break B return C forward Dfinally 3. 四种会话跟踪技术,哪个范围最大?( ) (单选) A page B request C session Dapplication 4. java中

2014年5月整理java笔试题及几个小面试题

实现2/1 3/2 5/3 8/5 13/8...前20项的和public class Test {public double sum(){double m = 1; //分母double n = 2;//分子double sum = 0;for (int i = 0; i < 20; i++) {sum = sum+n/m;double temp = m;m = n;n = m + temp;

2014年5月整理java面试题

1.Overload(方法重载)和override(方法覆盖)的区别: overload是指函数的名称相同,但是属性不同(返回类型除外)  override是对父类的虚函数进行“个性化”,要求属性必须与父类中声明的一致,不然会变成overload!   overload是完全隐藏了父类中函数的实现,相当于定义了一个同名函数  override是继承父类中函数实现,同时增加自己的功能

【语音处理】wav转pcm mp3转pcm Java示例代码

【语音处理】wav转pcmJava示例代码 都是作者亲测的代码哦。因各个音频之间存在差异导致转换会存在问题。建议大家自己有习惯看源码去了解音频相关知识的能力。 代码地址:https://gitee.com/xshuai/ai/blob/master/AIDemo/src/main/java/com/xs/audio/tns/WAVConvertPCM.java Wav转PCM   p

【百度语音合成】JavaAPI方式语音合成示例

Java-SDK合成语音示例:http://ai.baidu.com/forum/topic/show/492725REST-API文档地址:http://ai.baidu.com/docs#/TTS-API/top 本帖子主要示例通过REST API进行语音合成。使用Java语言进行示例Demo测试 创建语音应用并获取apikey secretkey  通过GET方式获取access_to