本文是记录自学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()+"什么都没买到");
}
}
}