文档章节

抽象练习、封装及javadoc使用等相关演示

Scalpel-21
 Scalpel-21
发布于 2016/05/22 12:02
字数 2797
阅读 36
收藏 3
点赞 2
评论 0

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("小了");
			}
		}
	}
}

© 著作权归作者所有

共有 人打赏支持
Scalpel-21
粉丝 2
博文 17
码字总数 23938
作品 0
朝阳
程序员
怎样编写高质量的java代码

代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍。也请有过代码质量...

今日竹石 ⋅ 2014/03/12 ⋅ 1

java8之lambda表达式(函数式接口)

在Java中有许多已有的接口都需要封装代码块,例如:Runnable或者Comparator。lambda表达式与这些接口是向后兼容的。对于只包含一个抽象方法的接口,你可以通过lambda表达式来创建该接口的对象...

柳哥 ⋅ 2015/05/21 ⋅ 0

Java编程思想 第1章 对象导论

真正开始理解 Java 这门语言,是在看到 Bruce Eckel 前辈写的《Java编程思想》开始的,第一眼看到 Bruce Eckel 在对象导论这一章的论述时,我就知道我找到了打开 Java 大门的钥匙。学习 Java...

木云凌 ⋅ 2016/02/23 ⋅ 0

开源平台eRedG4_V1.2版发布了

在广大网友的支持和鞭策下,eRedG4_V1.2版又登场了。 eRedG4(易道系统集成与应用开发平台)是一个开放源代码的、面向企业计算环境下异构系统集成与行业应用快速二次开发的平台。它包括:基础类...

Google ⋅ 2011/05/04 ⋅ 0

NetBeans Weekly 刊号 # 41 - Jan 13, 2009

原文链接:http://blog.csdn.net/vanessa219/article/details/3769483

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Android 快速开发框架--FastAndroid

这是一个封装了多方面开源库后基于MVP模式的一个Android快速开发框架,融入了MVP模式,将Activity或Fragment做为View层、抽象出Presenter用于处理业务逻辑、Model处理网络访问,数据封装等。降...

huntermr ⋅ 2016/03/08 ⋅ 0

TopNews高仿“今日头条”客户端,1.slidingmenu 侧拉菜单

2.UniversalImageLoader 目前最流行的图片异步加载库,配置强大,使用简单,绝对能满足你的各种需求! 高仿“今日头条”客户端,实现它大部分的功能,练习之作,目的了解怎么发开一个新闻类客...

梦想_在追逐 ⋅ 2015/09/07 ⋅ 0

Java IO流(一)

IO(Input Output)流的概述 下面给出IO流的基本概述,这样可以对IO流有一个宏观上的基本了解。 IO流用来处理设备之间的数据传输。 Java对数据的操作是通过流(系统资源)的方式。 Java用于操作流...

yerenyuan_pku ⋅ 2017/10/13 ⋅ 0

Winform开发框架之终极应用

在前面两篇随笔,都围绕着我的Winform开发框架介绍一些重要的组件,如字典模块封装《Winform开发框架之字典数据管理》和权限管理系统模块封装《Winform开发框架之权限管理系统》。本框架主要...

长平狐 ⋅ 2012/06/11 ⋅ 3

Winform开发框架之终极应用

在前面两篇随笔,都围绕着我的Winform开发框架介绍一些重要的组件,如字典模块封装《Winform开发框架之字典数据管理》和权限管理系统模块封装《Winform开发框架之权限管理系统》。本框架主要...

长平狐 ⋅ 2012/08/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud构建微服务架构—创建“服务注册中心”

创建一个基础的Spring Boot工程,命名为eureka-server,并在pom.xml中引入需要的依赖内容: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par......

itcloud ⋅ 19分钟前 ⋅ 0

拖动

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <style> #box { width: 100px; height: 100px; background-color: aquamarine; position: absolute; } </style......

fyliujj ⋅ 21分钟前 ⋅ 0

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[objec......

球球 ⋅ 23分钟前 ⋅ 0

kibana启动异常

检查一下:kibana.yml 每一对key:value中,冒号之后应有空格。

增删改查1 ⋅ 25分钟前 ⋅ 0

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过...

HaierBrother ⋅ 25分钟前 ⋅ 0

Mysql

1.Jdbc Url 设置allowMultiQueries为true和false mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。 参数名称 参数说明 缺省...

瑟青豆 ⋅ 29分钟前 ⋅ 0

mysql导出导入表结构与数据

当我们需要进行数据迁移时,mysql自带的mysqldump会是最好的方式。 1.导出某张表的结构和数据 首先,我们应当使用服务器,打开终端,连接到所需要导出的表所在的服务器上。执行命令: mysqld...

hengbao5 ⋅ 29分钟前 ⋅ 0

世界杯也走向“比拼”大数据的时代

《日本经济新闻》6月19日报道称,俄罗斯足球世界杯已于6月14日揭开战幕。作为第21次举办的足球世界杯,如何活用大数据有可能成为决定各支球队胜负的重要因素。从对阵球队的分析到战术建议,还...

加米谷大数据 ⋅ 29分钟前 ⋅ 0

金额转为千分制,金额转中文大写

金额转关为大写 /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = [...

YXMBetter ⋅ 32分钟前 ⋅ 0

开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

郑龙飞 ⋅ 38分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部