当前位置: 首页 > article >正文

补Java基础之重生(13)类与对象(补充版)+面向对象综合案例

在过去的10天里,终于把毕业论文定稿了,进度拖沓了,但是我还是会赶进度的,原计划的进度已经拖了很久了,我将在本周和下周三之前结束Java进阶技术的内容。

一、封装

(1)面向对象三大特征之一:封装

(2)封装的概念

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

(3)封装的两个大致原则:

把尽可能多的东西藏起来,对外提供便捷的接口
把所有的属性藏起来。

(4)封装的步骤

  1. 把属性的public访问修饰符改为private

private:只能在本类中进行访问

  1. 编写设置值与获取值的方法

一般来说,类名,属性名全部都是名词,方法名为动词

(5)如何实现封装

  1. 修改属性的可见性:设为private,防止错误的修改。
  2. 创建公有的getter/setter方法:用于属性的读写。
  3. 在getter/setter方法中加入属性控制语句:对属性值的合法性进行判断。

(6)封装的好处

  1. 便于使用者正确使用系统,防止错误修改属性。
  2. 有助于系统之间的松耦合,提高系统独立性。
  3. 提高软件的可重用性。
  4. 降低了构建大型系统的风险。

例子1:

自定义学生类

package FengZhuang;

/**
 * user:liaoxinyue
 * 学生类
 **/
public class Student {
	 private String name;
	 private int    age;
	 private String sex;
	 private double score;
	 
	 public String getName ( ) {
		  return name;
	 }
	 
	 public void setName ( String name ) {
		  if ( name.length ( ) == 0 || name.length ( ) > 20 ) {
				return;
		  } else {
				this.name = name;
		  }
	 }
	 
	 public int getAge ( ) {
		  return age;
	 }
	 
	 public void setAge ( int age ) {
		  this.age = age;
	 }
	 
	 public String getSex ( ) {
		  return sex;
	 }
	 
	 public void setSex ( String sex ) {
		  if ( !sex.equals ( "男" ) && !sex.equals ( "女" ) ) {
				this.sex = sex;
		  }
		  return;
	 }
	 
	 public double getScore ( ) {
		  return score;
	 }
	 
	 public void setScore ( double score ) {
		  if ( score < 0 || score > 100 ) {
				return;
		  } else {
				this.score = score;
		  }
		  
	 }
}

自定义学生管理测试类

package FengZhuang;

/**
 * user:liaoxinyue
 **/
public class StudentManager {
	 public static void main ( String[] args ) {
		  Student student = new Student ( );
		  student.setName ( "lxy" );
		  student.setAge ( 22 );
		  student.setSex ( "女" );
		  student.setScore ( 90 );
		  System.out.println ( "{" + student.getName ( ) + "},{" + student.getAge ( ) + "},{" + student.getSex ( ) + "},{" + student.getScore ( ) + "}" );
	 }
}

二、访问控制

(1)方法修饰符的权限

  1. public

最高权限,跨包,跨类都可以。

  1. default

默认的意思,在同一个包下,可以访问。跨包不可以访问。

  1. protected

低于public一级,在子类中可以访问。(继承的概念)

  1. private

最低权限,只能在本类中访问。

类成员的访问修饰

作用域\修饰符一个类中同一个包中子类中外部包
private可以不可以不可以不可以
default可以可以不可以不可以
protected可以可以可以不可以
public可以可以可以可以

注意事项: 在修饰类的访问修饰符只有public和default两种。类采用的默认修饰符只能在同包中使用

三、static修饰符

定义在属性和方法之上,加上此修饰符之后,这个属性或者方法就是类的静态成员。它是类级别的,公共的了,不是属于一个对象所私有的。

static可以修饰那些东西?

  • 成员变量

静态变量,可以直接通过类名访问

  • 成员方法

静态方法,可以直接通过类名访问

  • 代码块

静态代码块,当Java虚拟机加载类时,就会执行该代码块。

小练习:选民投票案例

例子1:
自定义选民类

package com.JavaCode.FengZhuang.Toll;

/**
 * 选民类
 * user:liaoxinyue
 **/
public class XuanMin {
//	 总票数
	 public static int num;//内存上只有一份,被所有的实例对象()所共享
	 public String name;
//	 投票
	 public void Poll(){
	 	 if ( XuanMin.num>=3 ){
			  return;
		 }
	 	 XuanMin.num++;
	 }
}

自定义测试类

package com.JavaCode.FengZhuang.Toll;

/**
 * user:liaoxinyue
 **/
public class Test {
	 public static void main ( String[] args ) {
		  XuanMin xuanMin=new XuanMin ();
		  xuanMin.name="廖心悦";
		  xuanMin.Poll ();
		  System.out.println ("总票数为:"+XuanMin.num );
		  XuanMin xuanMin1=new XuanMin ();
		  xuanMin1.name="廖继皓轩";
		  xuanMin1.Poll ();
		  System.out.println ("总票数为:"+XuanMin.num );
		  XuanMin xuanMin2=new XuanMin ();
		  xuanMin2.name="廖加全";
		  xuanMin2.Poll ();
		  System.out.println ("总票数为:"+XuanMin.num );
		  XuanMin xuanMin3=new XuanMin ();
		  xuanMin3.name="廖小狗";
		  xuanMin3.Poll ();
		  System.out.println ("总票数为:"+XuanMin.num );
		  XuanMin xuanMin4=new XuanMin ();
		  xuanMin4.name="邓书香";
		  xuanMin4.Poll ();
		  System.out.println ("总票数为:"+XuanMin.num );
	 }
}

四、static静态代码块

static代码块

  • jvm加载类时,加载静态代码块

如果有多个静态代码块,按顺序加载
每个静态代码块只会被执行一次。

static执行时机,当类加载的时候就去执行。

特征:只能执行一次
应用场景:连接数据库的时候,把数据库的连接对象
作用:给一些静态属性赋初始值。
目的:节省内存空间,减少不必要的内存资源浪费。节省程序的性能开销。

小练习

自定义学生类

package com.JavaCode.FengZhuang.entity;

/**
 * user:liaoxinyue
 **/
public class StudentDemo {
	 
	 public StudentDemo(){
		  System.out.println ("无参构造方法" );
	 }

	 //	 static执行时机,当类加载的时候就去执行。特征:只能执行一次
//	 应用场景:连接数据库的时候,把数据库的连接对象
//	 作用:给一些静态属性赋初始值。
//	 目的:节省内存空间,减少不必要的内存资源浪费。节省程序的性能开销。
	 private        String name;
	 private        int    age;
	 private static double money = 0.0;
	 
	 public String getName ( ) {
		  return name;
	 }
	 
	 public void setName ( String name ) {
		  this.name = name;
	 }
	 
	 public int getAge ( ) {
		  return age;
	 }
	 
	 public void setAge ( int age ) {
		  this.age = age;
	 }
	 
	 public static double getMoney ( ) {
		  return money;
	 }
	 
	 public static void setMoney ( double money ) {
		  StudentDemo.money = money;
	 }
	 static {
		  //静态代码块:只能访问静态的成员
		  StudentDemo.money += 100;
	 }
	 static {
		  //静态代码块:只能访问静态的成员
		  StudentDemo.money +=150;
	 }
	 public static void main ( String[] args ) {
		  StudentDemo studentDemo = new StudentDemo ( );
		  System.out.println ( studentDemo.money );
	 }
}

自定义测试类

package com.JavaCode.FengZhuang.entity;

/**
 * user:liaoxinyue
 **/
public class StudentDemoManager {
	 public static void main ( String[] args ) {
		  StudentDemo stu = new StudentDemo ( );
		  System.out.println ( stu.getMoney ( ) );
		  StudentDemo stu1 = new StudentDemo ( );//实例化对象之前就会执行,实例化对象就会触发类加载。
		  System.out.println ( stu1.getMoney ( ) );
		  
	 }
}

2、电影案例

自定义电影类

package Demo;

/**
 * user:liaoxinyue
 **/
public class Movie {
	 private int id;
	 private String name;
	 private double price;
	 private String actor;
	 
	 public Movie ( ) {
	 }
	 
	 public Movie ( int id , String name , double price , String actor ) {
		  this.id    = id;
		  this.name  = name;
		  this.price = price;
		  this.actor = actor;
	 }
	 
	 public String getName ( ) {
		  return name;
	 }
	 
	 public void setName ( String name ) {
		  this.name = name;
	 }
	 
	 public double getPrice ( ) {
		  return price;
	 }
	 
	 public void setPrice ( double price ) {
		  this.price = price;
	 }
	 
	 public String getActor ( ) {
		  return actor;
	 }
	 
	 public void setActor ( String actor ) {
		  this.actor = actor;
	 }
	 
	 public int getId ( ) {
		  return id;
	 }
	 
	 public void setId ( int id ) {
		  this.id = id;
	 }
}

自定义电影操作类

package Demo;

import java.util.*;

/**
 * user:liaoxinyue
 **/
public class MovieOperator {
	 private Movie[] movie;
	 private int     age;
	 
	 public MovieOperator ( Movie[] movie ) {
		  this.movie = movie;
	 }
	 
	 public void showAllMovie ( ) {
		  System.out.println ( "=========全部电影信息如下============" );
		  for ( int i = 0 ; i < movie.length ; i++ ) {
				Movie movies = movie[ i ];
				System.out.println ( movies.getId ( ) + "\t" + movies.getName ( ) + "\t" + movies.getPrice ( ) + "\t" + movies.getActor ( ) );
		  }
	 }
	 
	 public void getMovieById (  ) {
		  System.out.println ("请输入你要查询的电影id" );
		  System.out.println ("要查询的电影信息如下:" );
		  Scanner scanner=new Scanner ( System.in );
		  int id=scanner.nextInt ();
		  for ( int i = 0 ; i < movie.length ; i++ ) {
				Movie movies = movie[ i ];
				if ( movies.getId ()==id ){
					 System.out.println ( movies.getId ( ) + "\t" + movies.getName ( ) + "\t" + movies.getPrice ( ) + "\t" + movies.getActor ( ) );
					 return;
				}
			 
		  }
		  System.out.println ("查无此电影" );
	 }
}

自定义测试类

package Demo;

/**
 * user:liaoxinyue
 **/
public class MovieDemo {
	 public static void main ( String[] args ) {
		  //目标:掌握电影信息的开发
		  //1、每个电影是一个电影对象,首先设计电影类,用于创建电影对象,封装电影数据
		  //2、准备电影对象数据(电影信息):由一个一个的电影对象存储
		  Movie[] movie = new Movie[ 5 ];
		  movie[ 0 ] = new Movie ( 1 , "热辣滚筒" , 46.5 , "贾玲" );
		  movie[ 1 ] = new Movie ( 2 , "飞驰人生" , 49.6 , "沈腾" );
		  movie[ 2 ] = new Movie ( 3 , "非诚勿扰" , 50 , "葛优" );
		  movie[ 3 ] = new Movie ( 4 , "第二十条" , 46 , "赵丽颖" );
		  movie[ 4 ] = new Movie ( 5 , "熊出没" , 38 , "光头强" );
		  //3、把电影对象数据交给电影操作对象进行业务处理
		  MovieOperator movieOperator = new MovieOperator ( movie );
		  movieOperator.showAllMovie ( );
		  movieOperator.getMovieById ( );
	 }
}


http://www.kler.cn/a/599256.html

相关文章:

  • 智算中心系统化建设与运营框架
  • Netty源码—5.Pipeline和Handler一
  • 2000-2019年各省地方财政耕地占用税数据
  • Tailwind CSS 学习笔记(四)
  • 免费试用优化指南:提升转化率的关键策略
  • STM32:关于NVIC的工作与优先级分组方式
  • std::endl为什么C++ 智能提示是函数?
  • Python----计算机视觉处理(Opencv:图像亮度变换)
  • 【HTML5】02-列表 + 表格 + 表单
  • C语言动态顺序表的实现
  • 日常学习开发记录-select组件(1)
  • 【Linux】同步原理剖析及模拟BlockQueue生产消费模型
  • 数据结构--红黑树
  • SpringBoot星之语明星周边产品销售网站设计与实现
  • 23种设计模式-组合(Composite)设计模式
  • 第十六届蓝桥杯康复训练--6
  • 【C++】类和对象(匿名对象)
  • 【Unity】批处理和实例化的底层优化原理(未完)
  • 图论 | 98. 所有可达路径
  • C++效率掌握之STL库:stack queue函数全解