抽象练习、封装及javadoc使用等相关演示
抽象练习、封装及javadoc使用等相关演示
scalpel-21 发表于1年前
抽象练习、封装及javadoc使用等相关演示
  • 发表于 1年前
  • 阅读 36
  • 收藏 3
  • 点赞 2
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

1、抽象练习

class StudentDemo
{
	public static void main(String[] args){
		//创建对象
		Student zhangsan = new Student();
		//为对象设置数据
		zhangsan.name = "张三";
		zhangsan.sex = "男";
		zhangsan.age = 20;
		zhangsan.height = 1.75;
		zhangsan.telNum = "98765432100";
		//使用数据
		System.out.println("我叫:" + zhangsan.name + "  性别:" + zhangsan.sex + "  年龄:" + zhangsan.age + "  电话号码:" + zhangsan.telNum);
		//我叫:张三  性别:男  年龄:20  电话号码:98765432100
		//对象成员方法的使用
		zhangsan.changeTel("12345678900");//新电话号码是:12345678900
		System.out.println("我叫:" + zhangsan.name + "  性别:" + zhangsan.sex + "  年龄:" + zhangsan.age + "  电话号码:" + zhangsan.telNum);
		//我叫:张三  性别:男  年龄:20  电话号码:12345678900
		System.out.println("-----------------------------------");
		Student lisi = new Student();
		System.out.println("李四访问:" + lisi.teacher);
		System.out.println("张三访问:" + zhangsan.teacher);
		//zhangsan.changeTeacher("康老师");//合法 但一般不这样用
		Student.changeTeacher("康老师");//静态(static)的一般用类名. 的方式调用,而不是对象名.
		System.out.println("李四访问:" + lisi.teacher);
		System.out.println("张三访问:" + zhangsan.teacher);
		/*李四访问:赵旭
		张三访问:赵旭
		新老师是康老师
		李四访问:康老师
		张三访问:康老师*/
		System.out.println("--------------------------");
		Student wangwu = new Student();
		wangwu.name = "王五";
		wangwu.sex = "男";
		wangwu.age = 18;
		wangwu.height = 168;
		wangwu.telNum = "131 1111 1111";
		System.out.println("更改前的tel = " + wangwu.telNum);
		System.out.println("zhangsan的tel = " + zhangsan.telNum);
		wangwu.telNum = "132 2222 2222";
		System.out.println("更改后的tel = " + wangwu.telNum);
		System.out.println("zhangsan的tel = " + zhangsan.telNum);
		/*更改前的tel = 131 1111 1111
		zhangsan的tel = 12345678900
		更改后的tel = 132 2222 2222
		zhangsan的tel = 12345678900*/
	}
}
class Student
{
	//共享属性
	public static String classRoom;//null
	public static String teacher = "赵旭";
	//私有属性
	public String name;
	public String sex;
	public int age;
	public double height;
	public String telNum;

	//共享行为
	public static void cleanRoom(){
		System.out.println("打扫" + classRoom + "的卫生!");
	}
	public static void changeTeacher(String name){
		teacher = name;
		System.out.println("新老师是" + teacher);
	}
	//私有的行为
	public void changeTel(String newNum){
		telNum = newNum;
		System.out.println("新电话号码是:" + telNum);
	}
}

2、对象的相关调用演示

class OOp00
{
	public static void main(String[] args){
		FieldAndVariable fav = new FieldAndVariable();
		System.out.println(fav.num);//100
		fav.testVariable();//1000
		int num = 10;
		fav.test1(num);//11
		System.out.println("num = " + num);//10

		Student stu = new Student();
		stu.age = 10;
		fav.test(stu);//100
		System.out.println("main stu.age = " + stu.age);//100
	}
}
class FieldAndVariable
{
	public int num = 100;
	public void testVariable(){
		int num = 1000;
		System.out.println("num = " + num);
	}
	public void test1(int num){
		num++;
		System.out.println("num = " + num);
	}
	public void test(Student stu){
		stu.age = 100;
		System.out.println("test stu.age = " + stu.age);
	}
}
class Student
{
	public int age;
}

3、this关键字使用

this 关键字的使用: A、当局部变量和成员字段重名时,根据就近原则,调用的会是局部变量 B、如果非要使用成员字段,可以使用this关键字 格式: this.变量名

this关键字总结: A、哪个对象调用的方法,那个对象和栈桢之间产生一个绑定关系 B、当在方法中使用this时,this指的就是绑定的那个对象

class OOp01
{
	public static void main(String[] args){
		//ThisDemo td = new ThisDemo();
		//td.testNum();
		ThisDemo td = new ThisDemo();
		ThisDemo td2 = new ThisDemo();
		td.num = 11;
		td2.num = 12;
		td.testNum();
	}
}
class ThisDemo
{
	public int num = 10;
	public void testNum(){
		int num = 100;
		System.out.println("num = " + num);//100   //100
		System.out.println("成员字段 num = " + this.num);//10   //11
	}
}

4、匿名对象

匿名对象 new 类名();

匿名对象的使用:只使用一次 ----- 及时回收垃圾

作为方法的参数传递:使用匿名对象 ----- 及时垃圾回收

class OOp02
{
	public static void main(String[] args){
		/*Test test = new Test();
		test.test();
		test = null;*/
		new Test().test();//和上面的方法一样(用完之后即被垃圾回收)

		//作为方法的参数传递:使用匿名对象 ----- 及时垃圾回收
		Test test = new Test();
		doTest(new Test());
	}
	public static void doTest(Test test){
		test.test();
	}
}
class Test
{
	public void test(){
		System.out.println("test");
	}
}

5、对象层面的封装思想

前面代码遇到的问题: 赋值操作时,没有语法异常,但是可能产生逻辑异常

Java的解决方案: 对象层面的封装思想 ----> 字段私有,提供公共的访问方式 1、字段私有 ---- 字段被private修饰 外部不可以再用 对象名.变量名 的方式访问 ----> 直接赋值不可行 2、提供一个赋值方式 ---->赋值时,进行逻辑判断,不符合逻辑,不进行赋值 3、提供一种公共的访问方式 ----> 方法实现

private ---- 私有的 ---- 外部类访问报错,本类中可以访问 public ----- 公共的 ---- 本类或外部类都可以访问 private修饰方法: A、只可以在本类中访问,不可以在外部类中访问 B、构造方法私有化,让外部类不可以创建本部类对象

通过这么一个决解方案: 1、解决了安全问题 2、调用复杂化了 ----> Java是强安全型的语言 ----> 这是一种安全处理机制

要求:严格遵守这种安全机制

class OOp03
{
	public static void main(String[] args){
		Student stu = new Student();
		//stu.name = "张三";
		//stu.age = -18;
		//System.out.println("我叫:" + stu.name + "  年龄:" + stu.age);

		stu.setAge(10);
		//System.out.println("我年龄:" + stu.Age());//错误
		System.out.println("我年龄:" + stu.getAge());

		//Student.testPrivate();//错误 private 修饰的方法也不能在外部类访问
	}
}
class Student
{
	//public int age;
	private int age;
	//public String name;
	private String name;

	public void setAge(int a){
		if(a < 0){
			System.out.println("非法数据");
		}else{
			age = a;
		}
	}
	public int getAge(){
		return age;
	}
	private static void testPrivate(){
		System.out.println("prinvate方法测试");
	}
	public static void main(String[] args){
		Student stu = new Student();
		System.out.println(stu.age);

		testPrivate();// private 修饰的方法可以在本类中访问
	}
}

6、JavaBean规范与this调用构造方法

JavaBean规范: JavaBean ---- 普通Java类 规范 -------- 不是语法是业界默认的 A、必须有无参的构造方法 当编写了有参的构造方法时 要在显示的提供一个无参的构造方法 B、字段私有,提供公共的访问方式 一般字段:设置 setXXX(YYY XX) 获取 getXXX() boolean型:设置 setXXX(boolean XX) 获取 isXXX() C、必须有包 D、实现序列化接口

this调用构造方法: 为了实现代码复用,可以使用this调用构造方法 格式:this(参数,参数,....); 注意:this调用构造方法,必须位于第一行

class OOp04
{
	public static void main(String[] args){
		/*Student stu = new Student();
		stu.setName("张三");
		stu.setAge(18);
		stu.setBanzhang(false);
		System.out.println("我叫:" + stu.getName() + "  年龄:" + stu.getAge());这种方式较为繁琐*/

		Student stu2 = new Student("张三",18);
		System.out.println("我叫:" + stu2.getName() + "  年龄:" + stu2.getAge());
		//此方法与上面方法结果相同但要写一个有参的构造方法
		Student stu3 = new Student("李四",20,false);
		System.out.println("我叫:" + stu3.getName() + "  年龄:" + stu3.getAge() + "  是班长吗?" + stu3.isBanzhang());
	}
}
class Student
{
	private String name;
	private int age;
	private boolean banzhang;

	public Student(){

	}
	/*public Student(String n,int a){
		name = n;
		if(a < 0){
			System.out.println("非法数据");
		} else {
			age = a;
		}
		此处的变量 n a 若改成 name age 则打印结果为:我叫:null  年龄:0
		  解决:用this关键字 即把 name = name;改成 this.name = name;  age = age;改成 this.age = age;

	}*/
	public Student(String name,int age){
		this.name = name;
		if(age < 0){
			System.out.println("非法数据");
		} else {
			this.age = age;
		}
	}

	public Student(String name,int age,boolean banzhang){
		/*this.name = name;
		if(age < 0){
			System.out.println("非法数据");
		} else {
			this.age = age;
		}*/  //此处代码与上重复可以调用构造方法
		//Student(name,age);错误,调用构造方法要用this关键字
		this(name,age);
		this.banzhang = banzhang;
		//this(name,age);//this调用构造方法必须在第一行
	}

	public void setName(String n){
		name = n;
	}
	public String getName(){
		return name;
	}
	public void setAge(int a){
		age = a;
	}
	public int getAge(){
		return age;
	}
	public void setBanzhang(boolean b){
		banzhang = b;
	}
	public boolean isBanzhang(){
		return banzhang;
	}
}

7、面向对象练习

若是简单的问题就没必要用面向对象的思想

class OOp05
{
	public static void main(String[] args){
		Test00 t00 = new Test00();
		t00.setNum1(10);
		t00.setNum2(20);
		int sum = t00.getSum();
		System.out.println("sum = " + sum);

		int sum2 = Test01.getSum(1,2); 
		System.out.println("sum2 = " + sum2);

		System.out.println("长方形的周长 = " + ChangFangXing00.length(10,20));
		System.out.println("长方形的面积 = " + ChangFangXing00.area(10,20));

		ChangFangXing01 cf = new ChangFangXing01();
		cf.setWidth(20);
		cf.setLongs(20);
		System.out.println("周长 = " + cf.length());
		System.out.println("面积 = " + cf.area());
	}
}
class Test00
{
	private int num1;
	private int num2;

	public void setNum1(int num1){
		this.num1 = num1;
	}
	public int getNum1(){
		return num1;
	}

	public void setNum2(int num2){
		this.num2 = num2;
	}
	public int getNum2(){
		return num2;
	}
	public int getSum(){
		return num1 + num2;
	}
}
class Test01
{
	public static int getSum(int num1,int num2){
		return num1 + num2;
	}
}
class ChangFangXing00
{
	public static int length(int width,int longs){
		return (width + longs) * 2;
	}
	public static int area(int width,int longs){
		return width * longs;
	}
}
class ChangFangXing01
{
	private int width;
	private int longs;
	public void setWidth(int width){
		this.width = width;
	}
	public int getWidth(){
		return width;
	}
	public void setLongs(int longs){
		this.longs = longs;
	}
	public int getLongs(){
		return longs;
	}
	public int length(){
		return (width + longs) * 2;
	}
	public int area(){
		return width * longs;
	}
}

8、MyMath功能实现

MyMath类,实现两个数的加减乘除(说明当前类的作用)

@version 1.0
@author XXX
public class MyMath
{
	/**
	计算两个数的和
	@param num1 num2 ---- 参与运算的两个数
	@return 返回和  int型的
	*/
	public static int sum(int num1,int num2){
		return num1 + num2;
	}
	/**
	计算两个数的差
	@param num1 num2 ---- 参与运算的两个数
	@return 返回差 int型的
	*/
	public static int jian(int num1,int num2){
		return num1 - num2;
	}
	/**
	计算两个数的积
	@param num1 num2 ---- 参与运算的两个数
	@return 返回积 int型的
	*/
	public static int cheng(int num1,int num2){
		return num1 * num2;
	}
	/**
	计算两个数的商
	@param num1 num2 ---- 参与运算的两个数
	@return 返回商  int型的
	*/
	public static int chu(int num1,int num2){
		return num1 / num2;
	}
	/**
	计算三个数的最大值
	@param num1 num2 num3 ---- 参与运算的两个数
	@return 返回最大值 int型的
	*/
	public static int getMax(int num1,int num2,int num3){
		int max = num1 > num2 ? num1 : num2;
		max = max > num3 ? max : num3;
		return max;
	}
	/**
	计算指数
	@param num  底数
	@param n  指数
	@return 返回结果
	*/
	public static int getResult(int num,int n){
		int sum = 1;
		for(int i = 0;i < n;i++){
			sum = sum * num;
		}
		return sum;
	}
}

javadoc的使用、API介绍

MyMath 封装类一些常用的数学方法,那么如何实现这些方法的复用

A、不要重复发明轮子,许多功能都已经实现了 B、复用实现的功能 C、需要别人编写的class文件 ----->导jar包 D、调用class文件的实现

使用别人的class文件,需要知道怎么用,但是class文件不能直接看懂 所以,应该给class文件编写一个说明书

说明书制作使用的命令:
javadoc XXX.java ---->运行的是源代码

选项:
1、输出到指定路径
2、显示作者和版本
即:调用javadoc -d E:\doc -version -author MyMath.java (即将说明书创建在E盘的doc文件下且加上版本作者)

复用别人的代码:
A、Java官方提供的
B、第三方提供 ---->jar包

使用:
导入别人的class文件

读说明书: ---- 读API
A、有说明书
B、读

API ---->Application Programming Interface ---- 应用程序编程接口
API ---- Scanner ----> sun公司提供的API class文件
API文档 ---- 说明书,class文件功能的说明文件
源代码 ----- 多看源代码 ----> 他包含说明信息,包含具体实现

怎么读API文档:
1、找用的类
	A、显示 ----> 索引 ----> 类名
	B、java.util.Scanner
2、第一句话 ----> 说明类的功能
	找案例
3、读方法
	左侧栏:static 返回值类型
	右侧栏:方法名 和 参数 和 说明信息
4、练习:
	Math ----> 找到Math
	random ---> 方法信息
class OOp06
{
	public static void main(String[] args){
		int sum = MyMath.sum(1,2);
		System.out.println("sum = " + sum);
		int max = MyMath.getMax(4,9,3);
		System.out.println("max = " + max);
	}
}

9、读Math练习

注意:java中一旦提到取值范围都是左闭右开 n到m 即[n,m) java中一旦提到索引,就是从零开始

如果一个类属于java.lang包,可以不显示的导入 系统默认导入java.lang包

需求:[0,10)

import java.lang.Math;
class OOp07
{
	public static void main(String[] args){
		double d = Math.random();//[0.0,1.0)
		System.out.println("d = " + d);
		//生成[0,10)的整数
		int num = (int)(Math.random() * 10);
		System.out.println("num = " + num);
		//生成[1,10)的整数
		int num2 = (int)(Math.random() * 9) + 1;
		System.out.println("num2 = " + num2);
	}
}

10、猜数字游戏练习

猜数字:
A、后台随机生成一个[0,100)的随机数
B、键盘录入数字
C、比对,相等程序退出,录入 > 生成   大了
		               录入 < 生成   小了
80
50  小了
75  小了
81  大了
79  小了
80  ====
import java.util.Scanner;
class OOp08
{
	public static void main(String[] args){
		//后台生成随机数
		int num = (int)(Math.random() * 100);
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.println("请输入一个数字");
			int myNum = sc.nextInt();
			if(myNum == num){
				System.out.println("恭喜您,猜对了");
				break;
			}else if(myNum > num){
				System.out.println("大了");
			} else {
				System.out.println("小了");
			}
		}
	}
}
共有 人打赏支持
粉丝 3
博文 17
码字总数 23938
×
scalpel-21
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: