Java学习—Day01

自学Java-Day01

本文是记录自学java过程中的一些笔记和重点,java的基础语法知识先跳过,进入到面向对象思想的学习,内容仅供初学者参考,有不足之处欢迎大家批评指正。
众多周知,java是一门面相对象的程序设计语言,而面相对象的特点主要就是封装性继承性多态性,随着深入学习我会逐一介绍。

一、类的定义

在面向对象的思想中,最核心的就是对象,而要创建一个对象就需要定义一个类。

public class Person{
     
	int age;//成员变量
	public void speak(){
     //成员方法
		System.out.println("大家好,我今年"+age+"岁!");
	}
}

说明:Person是类名,age是成员变量,speak()是成员方法。
定义在类中的变量称为成员变量,而在方法中的变量称为局部变量,两者可以同名。

public class Person{
     
	int age=10;
	public void speak(){
     
		int age=60;//局部变量
		System.out.println("大家好,我今年"+age+"岁!");
	}
}

说明:此时成员方法speak()访问的是局部变量age,打印出来的值是60。

二、对象的创建

具体格式:类名 对象名称=new 类名()
具体案例:Person p=new Person()
说明:"new Person()"用于创建Person类的一个实例对象,“Person p"是声明了一个Person类型的变量p。”="用于将Person对象在内存中的地址值赋给变量p。

创建了之后该如何使用呢?
通过对象的引用来访问对象所有的成员。

public class Demo01{
     
	public static void main(String[] ages){
     
		Person p1=new Person();//创建第一个Person对象
		Person p2=new Person();//创建第二个Person对象
		p1.age=18;//给成员变量age赋值
		p1.speak();//调用成员方法
		p2.speak();
	} 
}

输出:大家好,我今年18岁!
大家好,我今年0岁!


从输出结果看出:p1和p2在调用speak()时,打印出来的age值不同,p1对象的age属性赋值为18,但是并没有对p2对象的age属性赋值,输出0值。原因:Java虚拟机会自动为成员变量进行初始化,针对不同类型的成员变量,赋予不同的初值。

成员变量类型 初始值
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0D
char 空字符,‘\u0000’
boolean false
引用数据类型 null

三、类的封装

封装是指:在定义一个类时,将类中的属性私有化。
使用private关键字来修饰,让私有属性只能在它所在的类中访问,若外界需要访问则要提供public修饰的公有方法。—getXxx方法(获取属性值方法)、setXxx方法(设置属性值方法)

public class Student{
     
	private String name;//将name属性私有化
	private int age;//将age属性私有化
	//get set方法
	public String getNmae(){
     
		return name;
	}
	public void setName(String stuName){
     
		name=stuName;
	}
	public int getAge(){
     
		return age;
	}
	public void setAge(int stuAge){
     
		//利用if语句对输入的年龄数据进行判定
		if(stuAge<=0){
     
			System.out.println("您输入的年龄有误!")
		else{
     
			age=stuAge;
			}
		}
	}
	public void introduce(){
     
		System.out.println("大家好,我叫"+name+",今年"+age+"岁!");
	}	
}
public class Demo02{
     
	public static void main(String[] ages){
     
		Student stu=new Student();
		stu.setAge(-30);
		stu.name("小明");
		stu.introduce();
	}
}

输出:您输入的年龄有误!
大家好,我叫小明,今年0岁!


说明:在将name、age属性私有化后,利用set和get方法分别设置属性的值和获取属性值。这样做的好处是可以对输入的值进行检查,提高代码逻辑的正确性。

四、总结案例

public class Product {
     //商品类
    private String proName;//商品名
    public String getProName(){
     
        return proName;
    }
    public void setProName(String proName){
     
        this.proName=proName;
    }
}
public class Market {
     
    private String marketName;//超市名
    private Product[] productArr;//超市仓库,里面有若干商品
    public String getMarketName(){
     
        return marketName;
    }
    public void setMarketName(String marketName){
     
        this.marketName=marketName;
    }
    public Product[] getProductArr(){
     
        return productArr;
    }
    public void setProductArr(Product[] productArr){
     
        this.productArr=productArr;
    }
    Product sell(String name) {
     //卖货,指定商品名
        for (int i=0;i<productArr.length;i++){
     
            //如果商品名称和要买的商品名称一样,则将该商品返回
            if(productArr[i].getProName()==name){
     
                return productArr[i];
            }
        }
        return null;
    }
}
public class Person {
     
    private String name;
    public String getName(){
     
        return name;
    }
    public void setName(String name){
     
        this.name=name;
    }
    Product shopping(Market market,String name) {
     
        return market.sell(name);
    }
}
public class Shopping {
     
    public  static void main(String[] ages){
     
        Product p1=new Product();
        Product p2=new Product();
        Product p3=new Product();
        Product p4=new Product();
        Product p5=new Product();
        p1.setProName("电视机");
        p2.setProName("洗衣机");
        p3.setProName("豆浆机");
        p4.setProName("空调机");
        p5.setProName("吹风机");
        //创建超市对象,给超市名字赋值,给仓库赋值
        Market m=new Market();
        m.setMarketName("家乐福");
        m.setProductArr(new Product[]{
     p1,p2,p3,p4,p5});
        //创建人对象,给名字赋值
        Person p=new Person();
        p.setName("小明");
        //调用购物方法,指定超市和商品名称,得到购物结果
        Product result=p.shopping(m,"豆浆机");
        //根据结果进行判断
        if (result!=null){
     
            System.out.println(p.getName()+"在"+m.getMarketName()+"买到了"+result.getProName());
        }else{
     
            System.out.println(p.getName()+"白跑了一趟,在"+m.getMarketName()+"什么都没买到");
        }
    }
}

输出:

你可能感兴趣的:(笔记,java,类,封装)