目录
Java 面向对象编程(OOP)是一种编程范式,它将数据(属性)和操作数据的方法(行为)封装在称为 “对象” 的实体中。以下是 Java OOP 的核心概念和思想:
面向对象:
Java 面向对象编程(OOP)是一种编程范式,它将数据(属性)和操作数据的方法(行为)封装在称为 “对象” 的实体中。以下是 Java OOP 的核心概念和思想:
一、方法:
方法“一词来源于日常生活中用语,意思是”指为获得某种东西或达到某种目的而采取的手段与行为方式“。在编程语言中,”方法“有时也被称为”函数“,其含义主要是”实现编程中某个具体功能的办法或方式,是一系列步骤的总结“。
方法是若干”代码语句片段”的集合,它们完成一个”具体的功能“,并且设置一个”直观易懂“的名字,方便后期在程序中去”使用(调用)
1、方法的定义:
修饰符 返画值类型 方法名(参数1..-参数n){ 方法体 }
修饰符:public static
返回值:任意,无返回值-void
方法名:见名知意,小驼峰命名
参数项:0-n个参数,每个参该用逗号分隔,参数类型 参数名;
方法体:n行代码,如果方法右返回值,return给返回值,return 给返回值
2、方法的调用:
方法定义的位置:类内部,方法的外面 方法执行次数一致, 方法调用完成后到原调用用 方法不调用不执行
package com.yuan;
import java.util.Arrays;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
//无返回值调用
System.out.println("111111111");
// sum1();
add(10, 45);
//有返回值调用
//赋值调用: 数据类型 变量名=方法名()--推荐
// String str=sum2();
// System.out.println(str);
//测试调用://System.out.println(sum());
//有参有返回值 使用赋值调用
String str2= test( "所庆娜", 18);
System.out.println(str2);
}
//无返回值
public static void sum1() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int a = sc.nextInt();
System.out.println("请输入一个整数");
int b = sc.nextInt();
int c = a + b;
System.out.println(c);
}
public static void add(int a, int b) {
int sum = a + b;
System.out.println("add 方法参数求和" + sum);
}
//有返回值
//无参数,有返回值
public static String sum2() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数组的长度");
int[] arr = new int[sc.nextInt()];
int add = 0;
for (int i = 0; i < arr.length; i++) {
System.out.println("清输入第" + (i + 1) + "个数");
arr[i] = sc.nextInt();
add += arr[i];
}
return Arrays.toString(arr) + "和为" + add;
}
//有参数,有返回信
public static String test(String name, int age) {
if (age >= 18) {
return name + "已经成年";
} else {
return name + "未成年";
}
}
}
3.方法的重载:
在一个类中,我们可以定义多个方法。如果有一系列方法,它们的功能都是类似的,只有参数有所不同,JavaOOP
的语法允许把这一组方法名定义为同名方法。例如,在Hello
类中,定义多个hello()
方法:
public class Test3 {
public static void main(String[] args) {
//方法的重载
int[] arr={1,2,3,4,5};
int[] arr1=copyOfRange(arr,2);
int[] arr2=copyOfRange(arr,2,4);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
}
public static int[] copyOfRange(int[] original,int from){
return copyOfRange(original,from,original.length);
}
public static int[] copyOfRange(int[] original,int from,int to){
int[] arr=new int[to-from+1];
for (int i = from,j=0; i <=to ;i++,j++) {
arr[j]=original[i];
}
return arr;
}
}
4、动态参数
(1)一个方法最多只能有一个动态参数
(2)动态参数放到末尾
(3)动态参数可以作为数组使用
(4)方法调用时,方法名参数名必须保持一致
public static void main(String[] args) {
int a1=10;
int b1=5;
int[] c1={1,2,3,4};
// int sum=sumOf(a1,b1,c1);
//关于动态参数的可用不可用
//int sum=sumOf(a1,b1);
int sum=sumOf(a1,b1,1,2,3,4,5);
System.out.println(sum);
}
/**
*
* @param a 参数
* @param b 参数
* @param c 动态参数
* @return
*/
public static int sumOf(int a,int b,int... c){
int sum=a+b;
for (int i = 0; i <c.length ; i++) {
sum+=c[i];
}
return sum;
}
5、值传递和引用传递
(1)值传递 复制值 传递
(2)引用传递 给引用数据类型地址 发生改变
public class Test4 {
public static void main(String[] args) {
int num1=10;
int num2=22;
System.out.printf("进入main方法中a的值:%d b的值:%d:\n",num1,num2);
swap(num1,num2);
System.out.printf("进入main方法中a的值:%d b的值:%d:\n",num1,num2); //num1 num2 未发生改变
int[] ns={1,2,3,4,5};
System.out.println(Arrays.toString(ns));
System.out.println("进入main中数组的arr:"+ Arrays.toString(ns));
swap(ns);
System.out.println("进入main中数组的arr:"+ Arrays.toString(ns)); //ns发生改变
}
//引用传递
public static void swap(int[] arr){
System.out.println("进入swap中数组的arr:"+ Arrays.toString(arr));
if(arr.length>=2){
arr[0]=arr[0]^arr[arr.length-1];
arr[arr.length-1]=arr[0]^arr[arr.length-1];
arr[0]=arr[0]^arr[arr.length-1];
}
System.out.println("结束swap中数组的arr:"+ Arrays.toString(arr));
}
//值传递
public static void swap(int a,int b){
System.out.printf("进入swap中a的值:%d b的值:%d:\n",a,b);
a=a^b;
b=a^b;
a=a^b;
System.out.printf("进入swap中a的值:%d b的值:%d:\n",a,b);
}
}
二、类的定义:
1、类:class 关键字:
修饰符 class 类名{ }
2、类属性:
里面可以写成员变量--属性(对类的信息静态的信息描述)
修饰符变量类型变量名:
修饰符:public
变量类型:可以是任意类型型
变量名:标识符
3、类方法:
里面可以写功能(对类的动态信息或者功能的描述)
修饰符 返回值类型方法名(参数){
修饰待:public 如果没有返回值,返回值的位置写void 如果有返回值,则必须号return对应类型的返回值
}
4、类的定义:
public class Person {
String accountName;
String accountId;
double accountBalance;
public void showMessage(){
String str="%s的银行卡账户为%s的里面的余额为%.2f\n";
System.out.printf(str,accountName,accountId,accountBalance);
}
}
5、使用类:
(1)创建对象语法规则: 类名 对象名= new 类名();
(2)调用属性:赋值:对象名.属性名 = 值;
(3) 取值:数据类型变量名=对象名.属性;
(4) 调用方法:对象名:方法名(参数);无返回值的方法调用数据类型 变量名=对象名,方法名(参数):有返回值的方法调用
class Test{
public static void main(String[] args) {
Person p1=new Person();
p1.accountName="张三"; //成员变量的赋值
p1.accountId="A0001";
p1.accountBalance=246328573469.5623;
String name =p1.accountName; //取值
System.out.println("用户p1的姓名为:"+name);
System.out.println(p1.accountName+"的银行卡为"+p1.accountId+"余额为:"+ p1.accountBalance);
p1.showMessage(); //成员方法的调用
//定义第二个对象
Person p2=new Person();
p2.accountName="李四"; //成员变量的赋值
p2.accountId="A0002";
p2.accountBalance=246328573469.5623;
p2.accountName="wang"; //重新赋值
System.out.println("用户p1的姓名为:"+name);
System.out.println(p1.accountName+"的银行卡为"+p1.accountId+"余额为:"+ p1.accountBalance);
p1.showMessage(); //成员方法的调用
}
}