Day09
面向对象:多是难点,主要时代码会敲
1.Java类及类的成员:属性、方法、构造器;代码块、内部类
2.面向对象的三大特征:封装类、继承性、多态性(抽象类)
3.其他关键字:this、super、static、final、abstract、interface、package、import
"大处着眼,大处着手"
面向过程与面向对象

二、"人把大象装进冰箱"
1.面向过程,强调的是功能行为,以函数未最小单位,考虑怎么做。
1.把冰箱门打开
2.抬起大象,塞进冰箱
3.把冰箱门关闭
2.面向对象:强调具备了功能的对象,以类/对象最小单位,考虑谁来做。
如何将大象装进冰箱
人{
    打开(冰箱){
        冰箱,开开(){
      
       }
       抬起(大象){
       大象,进入(冰箱);
        }

        关闭(冰箱){
        冰箱,闭合(); 
        }
}
冰箱{
    开开(){}
    闭合(){}
 }

   大象 {
        进入冰箱{
      
       }
       
}

面向对象的思想概述
Java的基本元素类和对象
类:是对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)
面向对象程序设计的重点是类的设计
设计类,就是设计类的成员。
!!!属性:对应类中的成员变量!!!
!!!行为:对应类中的成员方法!!!
Java类的实例化:创建对象
二、类和对象的使用(面向对象思想落地的实现)

  • 1.创建类,设计类的成员
  • 2.创建类的对象
  • 3.通过"对象.属性"或"对象.方法"调用对象的结构
    小故事:公孙龙白马非马
    反射
    堆区:对象实体
    方法:字符串、常量池、静态变量
类中属性的使用

属性(成员变量) vs 局部变量
属性 (成员变量) vs 局部变量
 * 1.相同点:
 *      1.1定义变量的格式:数据类型 变量名 = 变量值
 *      1.2先声明,后使用
 *      1.3变量都有其对应的作用域
 * 2.不同点:
 *      2.1在类中声明的位置的不同
 *      属性:直接定义在类的一对{}内
 *      局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
 *      
 *      2.2关于权限修饰符的不同
 *      属性:可以在声明属性时,指明其权限,使用权限修饰符。
 *      常用的权限修饰符:private、public、缺省、protected -->封装性
 *      目前:大家声明属性时,都使用缺省就可以了
 *      局部变量:不可以使用权限修饰符。
 *      
 *      2.3 默认初始化值的情况。
 *      属性:类的属性、根据其类型,都有默认初始化值
/*
 * 一、设计类: 其实就是设计类的成员
 * 
 *   属性 = 成员变量 = field = 域、字段
 *   方法= 成员方法 = 函数 = method
 *   
 *   创建类的对象 = 类的实例化 = 实例化类
 *   
 *   二、类和对象的使用(面向对象思想落地的实现)
 *   1.创建类,设计类的成员
 *   2.创建类的对象
 *   3.通过"对象.属性"或"对象.方法"调用对象的结构
 *   
 *   三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static)
 *    意味着:如果我们修改一个对象的属性a,则不影响另外一个对象的属性a\
 *   
 *   四、内存解析
 *   
 * */
//测试类
public class PersonTest {
   public static void main(String[] args) {
	   //创建Person类的对象
	   Person p1 = new Person();
	   //Scannner scanner = new Scanner(System.in);
	   
	   //调用对象的结构:属性、方法
	   //调用属性:"对象.属性"
	   p1.name = "Tom";
	   p1.isMale = true;
	   System.out.println(p1.name);
	   
	   //调用方法:"对象.方法"
	   p1.eat();
	   p1.sleep();
	   p1.talk("Chinese");
	   
	   //**************************
	   Person p2 = new Person();
	   System.out.println(p2.name);//Tom?null?报错?
	   System.out.println(p2.isMale);
	   //**************************
	   //将p1变量保存的对象地址值赋给p3,导致p1和p3指向了堆空间中的同一个对象实体。有意思!!!
	   Person p3 = p1;
	   System.out.println(p3.name);
	   
	   p3.age = 10;
	   System.out.println(p1.age);
 }
}

//
class Person{
	
	//属性
	String name;
	int age = 1;
	boolean isMale;
	
	//方法
	public void eat() {
		System.out.println("人可以吃饭");
	}
	
	public void sleep() {
		System.out.println("人可以睡觉");
	}
	public void talk(String language) {
		System.out.println("人可以说话,使用的是: " + language);
	}
}

//属性和方法的使用
/*
 * 类中属性的使用 
 * 
 * 属性 (成员变量) vs 局部变量
 * 1.相同点:
 *      1.1定义变量的格式:数据类型 变量名 = 变量值
 *      1.2先声明,后使用
 *      1.3变量都有其对应的作用域
 * 
 * 
 * 2.不同点:
 *      2.1在类中声明的位置的不同
 *      属性:直接定义在类的一对{}内
 *      局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
 *      
 *      2.2关于权限修饰符的不同
 *      属性:可以在声明属性时,指明其权限,使用权限修饰符。
 *      常用的权限修饰符:private、public、缺省、protected -->封装性
 *      目前:大家声明属性时,都使用缺省就可以了
 *      局部变量:不可以使用权限修饰符。
 *      
 *      2.3 默认初始化值的情况。
 *      属性:类的属性、根据其类型,都有默认初始化值
 *           整型(byte、short、int、long),0
 *           浮点型(float、double),0.0
 *           字符型(char),0(或'\u0000')
 *           布尔型(boolean),flase
 *           
 *           引用数据类型(类、数组、接口),null
 *           
 *      
 *      局部变量:没有默认初始化值。
 *           意味着,在调用之前,一定要显式赋值。
 *           特别地,形参在调用时,我们赋值即可。
 *           
 *      2.4在内存中加载的位置。
 *      属性:加载到堆空间中 (非static)
 *      局部变量:加载到栈空间
 *         
 *          
 * */
public class UserTest {
   
	public static void main(String[] args) {
		User u1 = new User();
		System.out.println(u1.name);
		System.out.println(u1.age);
		System.out.println(u1.isMale);
		
		u1.talk("韩语");
		
		u1.eat();
	}
}

class User{
     //属性 (或成员变量)
	String name;
	int age;
	boolean isMale;
	
public void talk(String language) {//language:形参
    System.out.println("我们使用" + language + "进行交流");
}

public void eat() {
	String food = "烙饼";//局部变量
	System.out.println("北方人喜欢吃:" + food);
 }
}

// 类中方法地声明和使用
/*
 * 类中方法地声明和使用
 * 
 * 方法:描述类应该具有地功能。
 * 比如:Math类:sqrt()\random()\...
 *     Scanner类:nextXxx() ...
 *     Arrays类:sort() \ binarySearch() \ toString() \equals() \...
 * 
 * 1.举例:方法声明
 * public void eat() {}
 * public void sleep(int hour) {}
 * public String getName() {}
 * public String getNation(String nation) {}
 *
 * 2.方法的声明:权限修饰符 返回值类型 方法名(形参列表){
 *                          方法体
 *                  }
 *    static、final、abstract 来修饰的方法,后买再讲。
 *    
 * 3. 说明: 
 *        3.1关于权限修饰符:默认方法的权限修饰符先使用public
 *             Java规定的4中权限修饰符:private、public、缺省、protected -->封装性再细聊
 * 
 *        3.2返回值类型:有返回值 vs 没有返回值
 *            3.2.1如果方法有返回值,则必须在方法声明时,指定返回值的类型,同时方法中需要使用
 *                  return关键字来返回指定类型的变量或常量。
 *               如果方法没有返回值,则方法声明时,使用void来表示
 *               使用return.但是,如果使用的话,只能return;"表示"
 *            3.2.2我们定义方法该不该有返回值?
 *               ① 题目要求
 *         3.3 方法名:属于标识符,遵循标识符的规则和规范,"见名知意" 
 *         
 *         3.4 形参列表:方法可以声明0个,1个,或多个形参。
 *             3.4.1 格式:数据类型1 形参1,数据类型2 形参2,...
 *             
 *             3.4.2 我们定义方法时,该不该定义形参?
 *                  ①题目要求
 *                  ②凭经验:具体问题具体分析
 *                  
 * 4.return关键字使用:
 *       1.使用范围:使用在方法体中
 *       2.作用:① 结束方法
 *             ② 针对于有返回值类型的方法,使用"return"数据"方法返回所要的数据"
 *       3.注意点:return关键字后面不可以声明执行语句。
 * 5. 方法的使用中,可以调用当前类的属性或方法
 *               
 *       
 * */
public class CustomerTest {
    public static void main(String[] args) {
		Customer cust1 = new Customer();
		
		cust1.eat();
		
		//测试形参是否需要设置的问题
//		cust1.sort(arr);
//		int[] arr = new int[] {3,4,5,2,5,63,2,5};
		
	}
}

//客户类
class Customer{
	
	//属性
	String name;
	int age;
	boolean isMale;
	
	//方法
	public void eat() {
		System.out.println("客户吃饭");
		return;
	}
	
	public void sleep(int hour) {
		System.out.println("休息了" + hour + "个小时");
	}
	
	public String getName() {
		if(age > 18) {
			return name;	
		}else {
			return "Tom";
		}
	}
	
	public String getNation(String nation) {
		String info = "我的国籍是:" + nation;
		return info;
	}
	
//	public void sort(int[] arr) {
//		
//	}
//   public void sort() {
//		int[] arr = new int[] {3,4,5,2,5,63,2,5};
//		//。。。。
//	}
}
 
//练习题打印圆的面积
//涉及方法
public class Person {
    
	 String name;
	 int age;
	 int sex;
	 /**
	  * sex:1表明是男性
	  * sex:0表明是女性
	  */
	 
	 public void study() {
		 System.out.println("studying");
	 }
	 
	 public void showAge() {
		 System.out.println("age" + age);
	 }
	 
	 public int addAge(int i) {
		 age += i;
		 return age;
	 }
}

//测试类

/*
 * 要求:(1)创建Person类的对象,设置该对象的name、
   age和sex属性,调用study方法,输出字符串
   “studying”,调用showAge()方法显示age值,调用
   addAge()方法给对象的age属性值增加2岁。
   (2)创建第二个对象,执行上述操作,体会同一个类的
   不同对象之间的关系。
 * 
 * */
public class PersonTest {
       
	  public static void main(String[] args) {
		  Person p1 = new Person();
		  
		  p1.name = "Tom";
		  p1.age = 18;
		  p1.sex = 1;
		  
		  p1.study();
		  
		  p1.showAge();
		  
		  int newAge = p1.addAge(2);
		  System.out.println(p1.name + "的新年龄为:" + newAge);
		  
		  System.out.println(p1.age);//20
		  
		  //********************************
		  Person p2 = new Person();
		  p2.showAge();//0
		  p2.addAge(10);
		  p2.showAge();//10
	}
}

//练习二
/*
 * 2.利用面向对象的编程方法,设计类Circle计算圆的面积。
 */
//测试类
public class CircleTest {
    public static void main(String[] args) {
		
    	  Circle c1 = new Circle();
    	  
    	  c1.radius = 2.1;
    	  
    	  //对应方式一:
//    	  double area = c1.findArea();
//    	  System.out.println(area);
    	  
    	  //对应方式对应方式二:
    	  //c1.findArea();
    	  
    	  //错误的调用
//    	  double area = c1.findArea(3.4);
//    	  System.out.println(area);
    	
	}
}

//圆
class Circle{
	
	//属性
	double radius;
	
	//求圆的面积
	//方式一:
//	public double findArea(double r) {
//		double area = Math.PI * radius * radius;
//		return area;
//	}
	
	//方式二:
//	public void findArea() {
//	    double 	area = Math.PI * redius * redius;
//	    System.out.println("面积为:" + area);
//	}
	
	//错误情况:
//	public double findArea(double r) {
//		double area = 3.14 * r * r;
//		return area;
//	}
}
此代码考验的是圆的测算和方法使用
//练习三
/*
 * 3.1 编写程序,声明一个method方法,在方法中打印一个10*8的*型
 * */
public class Exer3Test {
    public static void main(String[] args) {
	     Exer3Test test = new Exer3Test();
	     
	     //3.1测试
//	     test.method();
	     
	     //3.2测试
//	     int area = test.method();
//	     System.out.println("面积为: " + area);
	     
	     //方式二:
//	     System.out.println(test.method());
	     
	     //3.3测试
	     int area = test.method(12, 10);
	     System.out.println("面积为: " + area);
    }
    
//    public void method() {
//    	for(int i = 0;i < 10;i++) {
//    		for(int j = 0;j < 8;j++) {
//    		System.out.print("* ");
//    		}
//    		System.out.println();
//    	}
//   }
    //3.2
//  public int method() {
//	for(int i = 0;i < 10;i++) {
//		for(int j = 0;j < 8;j++) {
//		System.out.print("* ");
//		}
//		System.out.println();
//	}
//	
//	return 10 * 8;
//}
    //3.3
    public int method(int m,int n) {
    	      for(int i = 0;i < m;i++) {
    	    	      for(int j = 0;j < n;j++) {
    	    	    	      System.out.println("* ");
    	    	      }
    	    	      System.out.println();
    	      }
    	      
    	      return m * n;
    }
}
此代码考验的是方法的使用熟练

//练习三
/*
 * 4. 对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩
score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1) 生成随机数:Math.random(),返回值类型double;  
2) 四舍五入取整:Math.round(double d),返回值类型long。
5.声明一个日期类型MyDate:有属性:年year,月month,日day。创建2个日期
对象,分别赋值为:你的出生日期,你对象的出生日期,并显示信息。

 * 
 * */
public class StudentTest {
    public static void main(String[] args) {
      
//    	Student s1 = new Student();
//    	Student s1 = new Student();
//    	Student s1 = new Student();
//    	Student s1 = new Student();
//    	Student s1 = new Student();
//    	Student s1 = new Student();
        
    	   //声明Student类型的数组
    	   Student1[] stus = new Student1[20];
    	   
    	   for(int i = 0;i < stus.length;i++) {
    		   //给数组元素赋值
    		   stus[i] = new Student1();
    		   //给Student对象的属性赋值
    		   stus[i].number = i + 1;
    		   //年级:[1,6]
    		   stus[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);
    		   //成绩,[0,100]
    		   stus[i].score = (int)(Math.random() * (100 - 0 + 1));
    	   }
    	   
    	   //StudentTest1 test =  new StudentTest1();
    	   
    	   //遍历学生数组
       //test.print(stus);
       
    	   System.out.println("****************************");
    	   
    	   //问题一:打印出3年级(state值为3)的学生信息。
    	   for(int i = 0;i <stus.length;i++) {
    		   if(stus[i].state == 3) {
    			   System.out.println(stus[i].info());
    		   }
    	   }
    	   
    	   System.out.println("************************");
    	   //问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息

    	   //遍历学生数组
  }
    
    /**
     * @Description 遍历Student1[]数组
     * @author wumengchaojunstart
     * @data 2025年9月29日14:36:27
     * @param stus
     */
    public void print(Student1[] stus) {
    	   for(int i = 0;i <stus.length;i++) {
    	   System.out.println(stus[i].info());
       }
    }
    /**
     * 
     * @Description 查找Stduent数组中指定年级的学生信息
     * @author wumengchaojunstart
     * @data 2025年9月29日14:31:35
     * @param stus  要查找的数组
     * @param state 要找的年级
     */
    
    public void searchState(Student1[] stus,int state) {
    	   for(int i = 0;i <stus.length;i++) {
    		   if(stus[i].state == state) {
    			   System.out.println(stus[i].info());
    		   }
    	   }
    }
    
    /**
     * 
     * @Description 给Student1数组排序
     * @author wumengchaojunstart
     * @data 2025年9月29日14:35:25
     * @param stus
     */
    public void sort(Student1[] stus) {
 	   for(int i = 0;i < stus.length - 1;i++) {
		   for(int j = 0;j < stus.length - 1 -i;j++) {
			   if(stus[j].score > stus[j + 1].score) {
				   //如果需要换序,交换的是数组的元素,Student对象!!!
				   Student1 temp = stus[j];
				   stus[j] = stus[j + 1];
				   stus[j + 1] = temp;
			   } 
		   }
	   }
    }
}

class Student1{
	int number;//学号
	int state;//年级
	int score;///成绩
     
	//显示学生信息的方法
	public String info() {
		return "学号:" + number + ",年级" + state + ",成绩" + score;
	}
 }
还有需要补全的地方

1.举例:

  • 1.补全代码的声明:alt + /
  • 2.快速修复: ctrl + 1
  • 3.批量导包:ctrl + shift + o
  • 4.使用单行注释:ctrl + /
  • 5.使用多行注释: ctrl + shift + /
  • 6.取消多行注释:ctrl + shift + \
  • 7.复制指定行的代码:ctrl + alt + down 或 ctrl + alt + up
  • 8.删除指定行的代码:ctrl + d
  • 9.上下移动代码:alt + up 或 alt + down
  • 10.切换到下一行代码空位:shift + enter
  • 11.切换到上一行代码空位:ctrl + shift + enter
  • 12.如何查看源码:ctrl + 选中指定的结构 或 ctrl + shift + t
  • 13.退回到前一个编辑的页面:alt + left
  • 14.进入到下一个编辑的页面(针对于上面那条来说的):alt + right
  • 15.光标选中指定的类,查看继承树结构:ctrl + t
  • 16.复制代码: ctrl + c
  • 17.撤销: ctrl + z
  • 18.反撤销: ctrl + y
  • 19.剪切:ctrl + x
  • 20.粘贴:ctrl + v
  • 21.保存: ctrl + s
  • 22.全选:ctrl + a
  • 23.格式化代码: ctrl + shift + f
  • 24.选中数行,整体往后移动:tab
  • 25.选中数行,整体往前移动:shift + tab
  • 26.在当前类中,显示类结构,并支持搜索指定的方法、属性等:ctrl + o
  • 27.批量修改指定的变量名、方法名、类名等:alt + shift + r
  • 28.选中的结构的大小写的切换:变成大写: ctrl + shift + x
  • 29.选中的结构的大小写的切换:变成小写:ctrl + shift + y
  • 30.调出生成getter/setter/构造器等结构: alt + shift + s
  • 31.显示当前选择资源(工程 or 文件)的属性:alt + enter
  • 32.快速查找:参照选中的Word快速定位到下一个 :ctrl + k
  • 33.关闭当前窗口:ctrl + w
  • 34.关闭所有的窗口:ctrl + shift + w
  • 35.查看指定的结构使用过的地方:ctrl + alt + g
  • 36.查找与替换:ctrl + f
  • 37.最大化当前的View:ctrl + m
  • 38.直接定位到当前行的首位:home
  • 39.直接定位到当前行的末位:end
  •       整型(byte、short、int、long),0
    
  •       浮点型(float、double),0.0
    
  •       字符型(char),0(或'\u0000')
    
  •       布尔型(boolean),flase
    
  •       引用数据类型(类、数组、接口),null
    

类中地方法地使用:
!!!搞清楚返回值:是解决问题的根本!!!
返回值类型分为:有返回值和没有返回值和有形参和没有形参
Math类:sqrt()\random() ...
Scanner类:nextXxx()...
Arrays类:sort() \ binarySearch()
属性-->方法-->形参-->方法体

/*
 * 一、设计类: 其实就是设计类的成员
 * 
 *   属性 = 成员变量 = field = 域、字段
 *   方法= 成员方法 = 函数 = method
 *   
 *   创建类的对象 = 类的实例化 = 实例化类
 *   
 *   二、类和对象的使用(面向对象思想落地的实现)
 *   1.创建类,设计类的成员
 *   2.创建类的对象
 *   3.通过"对象.属性"或"对象.方法"调用对象的结构
 *   
 *   三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static)
 *    意味着:如果我们修改一个对象的属性a,则不影响另外一个对象的属性a\
 *   
 *   四、内存解析
 *   
 * */
//测试类
public class PersonTest {
   public static void main(String[] args) {
	   //创建Person类的对象
	   Person p1 = new Person();
	   //Scannner scanner = new Scanner(System.in);
	   
	   //调用对象的结构:属性、方法
	   //调用属性:"对象.属性"
	   p1.name = "Tom";
	   p1.isMale = true;
	   System.out.println(p1.name);
	   
	   //调用方法:"对象.方法"
	   p1.eat();
	   p1.sleep();
	   p1.talk("Chinese");
	   
	   //**************************
	   Person p2 = new Person();
	   System.out.println(p2.name);//Tom?null?报错?
	   System.out.println(p2.isMale);
	   //**************************
	   //将p1变量保存的对象地址值赋给p3,导致p1和p3指向了堆空间中的同一个对象实体。有意思!!!
	   Person p3 = p1;
	   System.out.println(p3.name);
	   
	   p3.age = 10;
	   System.out.println(p1.age);
 }
}

//
class Person{
	
	//属性
	String name;
	int age = 1;
	boolean isMale;
	
	//方法
	public void eat() {
		System.out.println("人可以吃饭");
	}
	
	public void sleep() {
		System.out.println("人可以睡觉");
	}
	public void talk(String language) {
		System.out.println("人可以说话,使用的是: " + language);
	}
}

//属性测试方法
/*
 * 一、设计类: 其实就是设计类的成员
 * 
 *   属性 = 成员变量 = field = 域、字段
 *   方法= 成员方法 = 函数 = method
 *   
 *   创建类的对象 = 类的实例化 = 实例化类
 *   
 *   二、类和对象的使用(面向对象思想落地的实现)
 *   1.创建类,设计类的成员
 *   2.创建类的对象
 *   3.通过"对象.属性"或"对象.方法"调用对象的结构
 *   
 *   三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static)
 *    意味着:如果我们修改一个对象的属性a,则不影响另外一个对象的属性a\
 *   
 *   四、内存解析
 *   
 * */
//测试类
public class PersonTest {
   public static void main(String[] args) {
	   //创建Person类的对象
	   Person p1 = new Person();
	   //Scannner scanner = new Scanner(System.in);
	   
	   //调用对象的结构:属性、方法
	   //调用属性:"对象.属性"
	   p1.name = "Tom";
	   p1.isMale = true;
	   System.out.println(p1.name);
	   
	   //调用方法:"对象.方法"
	   p1.eat();
	   p1.sleep();
	   p1.talk("Chinese");
	   
	   //**************************
	   Person p2 = new Person();
	   System.out.println(p2.name);//Tom?null?报错?
	   System.out.println(p2.isMale);
	   //**************************
	   //将p1变量保存的对象地址值赋给p3,导致p1和p3指向了堆空间中的同一个对象实体。有意思!!!
	   Person p3 = p1;
	   System.out.println(p3.name);
	   
	   p3.age = 10;
	   System.out.println(p1.age);
 }
}

//
class Person{
	
	//属性
	String name;
	int age = 1;
	boolean isMale;
	
	//方法
	public void eat() {
		System.out.println("人可以吃饭");
	}
	
	public void sleep() {
		System.out.println("人可以睡觉");
	}
	public void talk(String language) {
		System.out.println("人可以说话,使用的是: " + language);
	}
}

//有参和无参有返回值和无返回值测试
/*
 * 类中方法地声明和使用
 * 
 * 方法:描述类应该具有地功能。
 * 比如:Math类:sqrt()\random()\...
 *     Scanner类:nextXxx() ...
 *     Arrays类:sort() \ binarySearch() \ toString() \equals() \...
 * 
 * 1.举例:方法声明
 * public void eat() {}
 * public void sleep(int hour) {}
 * public String getName() {}
 * public String getNation(String nation) {}
 *
 * 2.方法的声明:权限修饰符 返回值类型 方法名(形参列表){
 *                          方法体
 *                  }
 *    static、final、abstract 来修饰的方法,后买再讲。
 *    
 * 3. 说明: 
 *        3.1关于权限修饰符:默认方法的权限修饰符先使用public
 *             Java规定的4中权限修饰符:private、public、缺省、protected -->封装性再细聊
 * 
 *        3.2返回值类型:有返回值 vs 没有返回值
 *            3.2.1如果方法有返回值,则必须在方法声明时,指定返回值的类型,同时方法中需要使用
 *                  return关键字来返回指定类型的变量或常量。
 *               如果方法没有返回值,则方法声明时,使用void来表示
 *               使用return.但是,如果使用的话,只能return;"表示"
 *            3.2.2我们定义方法该不该有返回值?
 *               ① 题目要求
 *         3.3 方法名:属于标识符,遵循标识符的规则和规范,"见名知意" 
 *         
 *         3.4 形参列表:方法可以声明0个,1个,或多个形参。
 *             3.4.1 格式:数据类型1 形参1,数据类型2 形参2,...
 *             
 *             3.4.2 我们定义方法时,该不该定义形参?
 *                  ①题目要求
 *                  ②凭经验:具体问题具体分析
 *                  
 * 4.return关键字使用:
 *       1.使用范围:使用在方法体中
 *       2.作用:① 结束方法
 *             ② 针对于有返回值类型的方法,使用"return"数据"方法返回所要的数据"
 *       3.注意点:return关键字后面不可以声明执行语句。
 * 5. 方法的使用中,可以调用当前类的属性或方法
 *               
 *       
 * */
public class CustomerTest {
    public static void main(String[] args) {
		Customer cust1 = new Customer();
		
		cust1.eat();
		
		//测试形参是否需要设置的问题
//		cust1.sort(arr);
//		int[] arr = new int[] {3,4,5,2,5,63,2,5};
		
	}
}

//客户类
class Customer{
	
	//属性
	String name;
	int age;
	boolean isMale;
	
	//方法
	public void eat() {
		System.out.println("客户吃饭");
		return;
	}
	
	public void sleep(int hour) {
		System.out.println("休息了" + hour + "个小时");
	}
	
	public String getName() {
		if(age > 18) {
			return name;	
		}else {
			return "Tom";
		}
	}
	
	public String getNation(String nation) {
		String info = "我的国籍是:" + nation;
		return info;
	}
	
//	public void sort(int[] arr) {
//		
//	}
//   public void sort() {
//		int[] arr = new int[] {3,4,5,2,5,63,2,5};
//		//。。。。
//	}
}

//方法练习
/*
 * 要求:(1)创建Person类的对象,设置该对象的name、
   age和sex属性,调用study方法,输出字符串
   “studying”,调用showAge()方法显示age值,调用
   addAge()方法给对象的age属性值增加2岁。
   (2)创建第二个对象,执行上述操作,体会同一个类的
   不同对象之间的关系。
 * 
 * */
public class PersonTest {
       
	  public static void main(String[] args) {
		  Person p1 = new Person();
		  
		  p1.name = "Tom";
		  p1.age = 18;
		  p1.sex = 1;
		  
		  p1.study();
		  
		  p1.showAge();
		  
		  int newAge = p1.addAge(2);
		  System.out.println(p1.name + "的新年龄为:" + newAge);
		  
		  System.out.println(p1.age);//20
		  
		  //********************************
		  Person p2 = new Person();
		  p2.showAge();//0
		  p2.addAge(10);
		  p2.showAge();//10
	}
}

//方法设计

public class Person {
    
	 String name;
	 int age;
	 int sex;
	 /**
	  * sex:1表明是男性
	  * sex:0表明是女性
	  */
	 
	 public void study() {
		 System.out.println("studying");
	 }
	 
	 public void showAge() {
		 System.out.println("age" + age);
	 }
	 
	 public int addAge(int i) {
		 age += i;
		 return age;
	 }
}

//
/*
 * 2.利用面向对象的编程方法,设计类Circle计算圆的面积。
 * */
//测试类
public class CircleTest {
    public static void main(String[] args) {
		
    	  Circle c1 = new Circle();
    	  c1.redius = 2.1;
    	  
    	  double area = c1.findArea();
    	  System.out.println(c1.findArea());
	}
}

//圆
class Circle{
	
	//属性
	double radius;
	
	//求圆的面积
	//方式一:
//	public double findArea() {
//		double area = Math.PI * radius * radius;
//		return area;
//	}
	
	//方式二:
	public void findArea() {
		
	}
}

//数组的遍历
/*
package com.atguigu.exer;
/*
 * 4. 对象数组题目:
  定义类Student,包含三个属性:学号number(int),年级state(int),成绩
  score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
  问题一:打印出3年级(state值为3)的学生信息。
  问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
  提示:
  1) 生成随机数:Math.random(),返回值类型double;  
  2) 四舍五入取整:Math.round(double d),返回值类型long。
 *  
 * 此代码是对StudentTest.java的该进,将操作数组的功能封装到方法中。
 *
 *
 *
 */
public class StudentTest {
	public static void main(String[] args) {
		
		//声明Student类型的数组
		Student1[] stus = new Student1[20];
		
		for(int i = 0; i < stus.length;i++) {
			//给数组元素赋值
			stus[i] = new Student1();
			//给Student对象的属性赋值
			stus[i].number = (i + 1);
			//年级:[1,6]
			stus[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);
			//成绩:[0-100]
			stus[i].score = (int)(Math.random() * (100 - 0 + 1));
		}
		StudentTest test = new StudentTest();
		
		//遍历学生数组
		test.print(stus);
		
		System.out.println("**********************************");
        
		//问题一:打印3年级(state值为3)的学生信息
		test.searchState(stus, 3);
		
		System.out.println("***********************************");
		
		//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
	    test.sort(stus);
		
		for(int i = 0;i < stus.length;i++) {
		    System.out.println(stus[i].info());
		}
	}
	
	//遍历Student1[]数组的擦作
	public void print(Student1[] stus) {
		//遍历学生数组
		for(int i = 0;i < stus.length;i++) {
		    System.out.println(stus[i].info());
		}
	}
	/**
	 * @Description 查找Student数组中指定年级的学生信息
	 * @param stus
	 * @param state 要找的年级
	 */
	
	public void searchState(Student1[] stus,int state) {
		for(int i = 0;i < stus.length;i++) {
			if(stus[i].state == state) {
			System.out.println(stus[i].info());
			}
		}
	}
	/**
	 * @Description 查找Student数组中学生排序
	 * @param stus
	 * @param state 对学生成绩进行排序
	 */
	public void sort(Student1[] stus) {
		for(int i = 0;i < stus.length - 1;i++) {
		     for(int j = 0;j < stus.length - 1 - i;j++) {
		    	 if(stus[j].score > stus[j + 1].score) {
		    		 //如果需要换序,交换的是数组的元素;Student对象!!!
		    		 Student1 temp = stus[j];
		    		 stus[j] = stus[j + 1];
		    		 stus[j + 1] = temp;
		    	 }
		     }	
		}
	}
}
class Student1{
	int number;//学号
	int state;//年级
	int score;//成绩
	
	//显示学生信息的方法
	public String info() {
		return "学号:" + number + " ,年级 " + state + ",成绩:"+score;
	}
}
/*
1.面向对象思想编程内容的三条主线分别是什么?
<1>类及类的成员:属性、方法、构造器、代码块、内部类
<2>面向对象的三大特征:封装、继承、多态
<3>其他关键字:this,super,abstract,interface,static,final,package,import
面向对象的编程思想?
(类、对象:面向对象的三大特征......)
2.谈谈你对面向对象中类和对象的理解,并指出二者的关系。
类:抽象的、概念上的内容
对象:实实在在存在的一个个体
对象是由类派生出来的
3.面向对象思想的体现一:类和对象的创建执行操作有哪三步?
<1>创建类
<2>类的实例化
<3>调用对象的结构:"对象.属性""对象.方法"
4.画出代码在执行是的工作
class Car{
     String color = "red";
     int num = 4;
     void show(){
         int a = 10;
         System.out.println("color"+color+,"num"+num);
     }
}

class CarTest{
  public static main(String[] args){
       Car c1 = new Car();
       Car c2 = new Car();
     
       c1.coler = "blue";
       c1.show();
       c2.show();
  }
}

5.类的方法内是否可以定义变量?是否可以调用属性?是否可以定义方法?是否可以调用方法?
是;是;否;是

6.对象的创建与对象的内存解析
典型代码:
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();//没有新创建一个对象,共用一个堆空间中的对象实体。
说明:
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)
意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。

内存解析:
匿名对象:
匿名对象不需要自己new一个类,而只需要将需要引用的对象进行引用就可以完成。
匿名对象:好想跑龙套的就出现一次下次使用还是需要调用使用。
*/

以上是更新的内容,面向对象的内容繁杂而且知识点多需要吸收。

posted on 2025-09-26 17:59  超哥进阶之路  阅读(8)  评论(0)    收藏  举报