栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面向对象 第三天

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面向对象 第三天

递归方法(一个方法体内调用它自身)

注意一点:
String属于引用数据类型,但有一点特殊,可以写
String s1=“hello”; 而不用new。


练习一:

package com.atguigu.java1;

public class RecursionTest {
	public static void main(String[] args) {
		RecursionTest test=new RecursionTest();
		int value1=test.getSum(100);
		System.out.println(value1);
		int value2=test.getCheng(5);
		System.out.println(value2);
	}
	//求1-n之间自然数和
	public int getSum(int n){   
		if(n==1){
			return 1;  //递归出口
		}else{
			return n+getSum(n-1);
		}
	}
	//求1-n之间自然数乘积
	public int getCheng(int n){   
		if(n==1){
			return 1;
		}else{
			return n*getCheng(n-1);
		}
	}
}


练习二:

已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值。

错误写法
正确写法(结果为10497):

package com.atguigu.java1;
public class RecursionTest {
	public static void main(String[] args) {
		RecursionTest test=new RecursionTest();
		System.out.println(test.f(10));
	}
	public int f(int n){
		if(n==0){
			return 1; 
		}else if(n==1){
			return 4;
		}else{
			return 2*f(n-1)+f(n-2);  
		}
	}
}

面向对象的特征——封装与隐藏

package com.atguigu.java;

public class AnimalTest {
	public static void main(String[] args) {
		Animal a=new Animal();
		a.name="大黄";
		//a.legs=4;  //Animal类中给legs添加了private权限,所以就不能再直接调用,只能走调用setLegs(方法)这条路,更合理
		a.setLegs(6); 
		a.show();      		
	}
}
class Animal{
	String name;
	private int age;
	//给动物腿的数量加一个限制,使其合理。
	//实现了对legs属性的封装(使其不对外暴露)
	private int legs;
	//①对属性的设置
	public void setLegs(int l){
		if(l>0&&l%2==0){
			legs=l;
		}else{
			legs=0;
		}
	}
	//②对属性的获取
	public int getLegs(){
		return legs;
	}
	//提供关于属性age的get和set方法.
	public int getAge(){
		return age;
	}
	public void setAge(int a){
		age=a;
	}
	public void eat(){
		System.out.println("动物进食");
	}	
	public void show(){
		System.out.println("name= "+name+",age= "+age+",legs= "+legs);
	}
}



Java四种权限修饰符

Java四种权限修饰符(从小到大排列):
private、缺省、protected、public
四种修饰权限可以用来修饰类及类的内部结构:
属性、方法、构造器、内部类
细说:
①四种修饰权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类;
②规定修饰类的话只能使用缺省和public。
总结:Java提供了四种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性大小。

练习:

package com.atguigu.exer;

public class Person {
	private int age;
	//设置
	public void setAge(int a){
		if(age>=0&&age<=130){
			age=a;
		}else{
			System.out.println("输入数据非法!");
		}
	}
	//获取
	public int getAge(){
		return age;
	}
}

package com.atguigu.exer;

public class PersonTest {
	public static void main(String[] args) {
		Person b=new Person();
		b.setAge(12);
		System.out.println("获取年龄为:"+b.getAge());
}
}

构造器

package com.atguigu.java;

public class PersonTest {
	public static void main(String[] args) {
		//创建类的对象:new + 构造器
		Person p=new Person();  // Person() 即为一个构造器(默认的空参构造器)
		p.eat();
		
		Person p1=new Person("Tom");  //造对象时,把name值也赋上了
		System.out.println(p1.name);   //Tom
		Person p2=new Person("Tommm", 12);
		System.out.println(p2.name+", "+p2.age);   //Tommm, 12
	}

}
class Person{
	//属性
	String name;
	int age;
	//构造器
	public Person(){
		System.out.println("Person()...");
	}
	public Person(String n){
		name=n;              //造对象时,把name值也赋上了
	}
	public Person(String n,int a){
		name=n;              //造对象时,把name值、age值都赋上了
		age=a;
	}
	//方法
	public void eat(){
		System.out.println("干饭");
	}
	public void study(){
		System.out.println("学习");
	}
	
}

package com.atguigu.exer;

public class Person {
	private int age;  
	private String name;   //私有属性,可以在下面提供公共的get和set方法-----封装性
	//声明构造器
	public Person(){
		age=18;
	}
	public Person(String n,int a){  //通过此构造器构造对象时,就把这两个属性赋上了值
		name=n;
		age=a;
	}
	//设置
	public void setAge(int a){
		if(age>=0&&age<=130){
			age=a;
		}else{
			System.out.println("输入数据非法!");
		}
	}
	//获取
	public int getAge(){
		return age;
	}
	//设置get和set方法
	public void setName(String n){
		name=n;
	}
	public String getName(){
		return name;
	}
	
		
}

package com.atguigu.exer;

public class PersonTest {
	public static void main(String[] args) {
		Person b=new Person();
		System.out.println("获取年龄为:"+b.getAge());  //18
		Person p1=new Person("Tom", 21);
		System.out.println("name="+p1.getName()+",age="+p1.getAge());
	}
}

package com.atguigu.exer1;

public class TriAngle {  //angle:角       angel:天使
	private double base;  //底边长
	private double height;  //高
	//提供类必要的构造器
	public TriAngle(){     //习惯上提供一个空参构造器
		 
	}
	public TriAngle(double b,double h){
		base=b;
		height=h;
	}
	//设置get和set方法
	public void setbase(double b){
		base=b;
	}
	public double getbase(){
		return base;
	}
	public void setHeight(double h){
		height=h;
	}
	public double getHeight(){
		return height;
	}
}

package com.atguigu.exer1;

public class TriAngleTest {
	public static void main(String[] args) {
		TriAngle t1=new TriAngle();  //调用空参构造器
		t1.setbase(2.0);
		t1.setHeight(2.4);
		System.out.println("base:"+t1.getbase()+",height:"+t1.getHeight());  //base:2.0,height:2.4
		TriAngle t2=new TriAngle(5.1,5.6);
		System.out.println("base:"+t2.getbase()+",height:"+t2.getHeight());  //base:5.1,height:5.6
		double area=(t1.getbase()*t1.getHeight())/2.0;
		System.out.println("面积:"+area);
	}
}

属性赋值的先后顺序

首先思考:属性在什么位置可以赋值?
①默认初始化
②显式初始化
③构造器中初始化(赋值)
④通过“对象.方法”或“对象.属性”进行赋值
以上操作的先后顺序是怎样的?

显示赋值肯定在默认赋值后面。

我们验证一下显式初始化和构造器赋值的先后顺序:

package com.atguigu.java;

public class UserTest {
	public static void main(String[] args) {
		User u=new User();   
		System.out.println(u.age);  //1
		User u1=new User(2);  //构造器给属性赋值 
		System.out.println(u1.age); // 2
	}
	
}
class User{
	String name;
	int age=1;
	
	public User(){
		
	}
	
	public User(int a){
		age=a;
	}
}

2在后面把1覆盖掉了,所以构造器赋值在显式赋值后。

JavaBean

如下即为一个JavaBean:

package com.atguigu.java;

public class Customer {
	private int id;
	private String name;
	public Customer(){
		
	}
	public void setId(int i){
		id=i;
	}
	public int getId(){
		return id;
	}
	public void setName(String n){
		name=n;
	}
	public String getName(){
		return name;
	}
}

UML类图

UML类图的各要素

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号