JavaSE学习总结第07天_面向对象2
07.01 成员变量和局部变量的区别
1.在类中的位置不同
成员变量 类中方法外
局部变量 方法内或者方法声明上
2.在内存中的位置不同
成员变量 堆内存
局部变量 栈内存
3.生命周期不同
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
4.初始化值不同
成员变量 有默认的初始化值
局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
07.02 方法的形式参数是类名的调用
例:
class Demo
{
public static void main(String[] args)
{
//创建学生对象
Student s = new Student();
StudentDemo sd = new StudentDemo();
sd.method(s);
}
}
class StudentDemo
{
//形式参数是引用类型
public void method(Student s)
{
s.show();
}
}
class Student
{
public void show()
{
System.out.println("学生爱学习");
}
}
07.03 匿名对象的概述和应用
匿名对象:就是没有名字的对象。是对象的一种简化表示形式
匿名对象的两种使用情况:
1.对象调用方法仅仅一次的时候
2.作为实际参数传递
例:
class Demo
{
public static void main(String[] args)
{
//匿名对象调用方法
new Student().show();
}
}
class Student
{
public void show()
{
System.out.println("学生爱学习");
}
}
匿名对象调用完毕就是垃圾,垃圾回收器会在适当的时间回收,提高内存的使用效率
07.04 封装的概述
封装概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
例:
class Student
{
String name;
//将age私有,只能在Student类中访问
private int age; //提供对外访问的方法获取age的值
public int getAge()
{
return age;
}
//提供对外访问的方法,并可以对传入的a的值进行判断,满足条件则赋值给age,不满足则不赋值
public void setAge(int a)
{
age = a;
}
public void show()
{
System.out.println("姓名:"+name+" "+"年龄:"+age);
}
}
07.05 封装的好处和设计原则
封装好处:
1.隐藏实现细节,提供公共的访问方式
2.提高了代码的复用性
3.提高安全性
封装原则:将不需要对外提供的内容都隐藏起来。把属性隐藏,提供公共方法对其访问。
07.06 private关键字的概述和特点
private关键字:是一个权限修饰符。可以修饰成员(成员变量和成员方法),被private修饰的成员只在本类中才能访问。
private最常见的应用:
1.把成员变量用private修饰
2.提供对应的getXxx()/setXxx()方法
07.07 private的应用标准案例
class Demo
{
public static void main(String[] args)
{
Student s = new Student();
//给成员变量赋值
s.setName("小强");
s.setAge(25); System.out.println(s.getName()+":"+s.getAge());
}
}
class Student
{
private String name;
//将age私有,只能在Student类中访问
private int age; //提供对外访问的方法获取name的值
public String getName()
{
return name;
}
//提供对外访问的方法设置name的值
public void setName(String n)
{
name = n;
}
//提供对外访问的方法获取age的值
public int getAge()
{
return age;
}
//提供对外访问的方法设置age的值
public void setAge(int a)
{
age = a;
}
}
07.08 this关键字的概述和应用
this:代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
当局部变量隐藏成员变量时使用this
例:
class Student
{
private String name;
//将age私有,只能在Student类中访问
private int age; //提供对外访问的方法获取name的值
public String getName()
{
return name;
}
//提供对外访问的方法设置name的值
public void setName(String name)
{
this.name = name;
}
//提供对外访问的方法获取age的值
public int getAge()
{
return age;
}
//提供对外访问的方法设置age的值
public void setAge(int age)
{
this.age = age;
}
}
07.09 this关键字的内存图解
07.10 标准的手机类代码及其测试
class Demo
{
public static void main(String[] args)
{
Phone p = new Phone();
System.out.println("品牌:"+p.getBrand()+" 价格:"+p.getPrice()+" 颜色:"+p.getColor());
p.setBrand("小米");
p.setPrice(1999);
p.setColor("白色");
System.out.println("品牌:"+p.getBrand()+" 价格:"+p.getPrice()+" 颜色:"+p.getColor());
}
}
class Phone
{
private String brand;//品牌
private int price;//价格
private String color;//颜色 public String getBrand()
{
return brand;
}
public void setBrand(String brand)
{
this.brand = brand;
} public int getPrice()
{
return price;
}
public void setPrice(int price)
{
this.price = price;
} public String getColor()
{
return color;
}
public void setColor(String color)
{
this.color = color;
}
}
运行结果:
品牌:null 价格:0 颜色:null
品牌:小米价格:1999 颜色:白色
07.11 构造方法概述和格式
构造方法作用概述:给对象的数据进行初始化
构造方法格式:
1.方法名与类名相同
2.没有返回值类型,连void都没有
3.没有具体的返回值
例:
07.12 构造方法的重载及注意事项
构造方法注意事项:
1.如果不提供构造方法,系统会给出默认构造方法
2.如果提供了构造方法,系统将不再提供
3.构造方法也是可以重载的
07.13 成员方法的分类及使用
方法具体划分:
根据返回值:1.有明确返回值方法 2.返回void类型的方法
根据形式参数:1.无参方法 2.带参方法
例:
class Demo
{
public static void main(String[] args)
{
Student s = new Student();
String str = s.getString();
System.out.println(str);
s.show();
s.method("小强");
}
}
class Student
{
private String name;
private int age;
//有明确返回值的无参方法
public String getString()
{
return "hello";
}
//返回void类型的无参方法
public void show()
{
System.out.println("show run");
}
//返回void类型的带参方法
public void method(String name)
{
System.out.println("name:"+name);
}
}
07.14 一个标准学生类的代码及测试
类的组成:
1.成员变量
2.构造方法[无参构造方法 / 带参构造方法]
3.成员方法[getXxx() / setXxx()]
给成员变量赋值的方式
1.无参构造方法 + setXxx()
2.带参构造方法
/*
学生类:
成员变量:name,age
构造方法:无参,带两个参
成员方法:getXxx()/setXxx()
show():输出该类的所有成员变量值 给成员变量赋值:
A:setXxx()方法
B:构造方法 输出成员变量值的方式:
A:通过getXxx()分别获取然后拼接
B:通过调用show()方法搞定
*/
//测试类
class Demo
{
public static void main(String[] args)
{
//方式1给成员变量赋值
//无参构造+setXxx()
Student s1 = new Student();
s1.setName("小明");
s1.setAge(27);
//输出值
System.out.println(s1.getName()+"---"+s1.getAge());
System.out.println("----------------------------"); //方式2给成员变量赋值
Student s2 = new Student("小强",30);
s2.show();
}
} class Student
{
//姓名
private String name;
//年龄
private int age; //构造方法
public Student()
{
} public Student(String name,int age)
{
this.name = name;
this.age = age;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public int getAge()
{
return age;
} public void setAge(int age)
{
this.age = age;
} //输出所有的成员变量值
public void show()
{
System.out.println(name+"---"+age);
}
}
07.15 一个标准的手机的代码及测试
//测试类
class Demo
{
public static void main(String[] args)
{
//创建对象
Phone p = new Phone(); //给成员变量赋值
p.setBrand("小米");
p.setPrice(2299);
p.setColor("白色"); //获取值
System.out.println(p.getBrand()+"---"+p.getPrice()+"---"+p.getColor());
}
} //定义手机类
class Phone
{
//品牌
private String brand;
//价格
private int price;
//颜色
private String color; //无参构造方法
public Phone()
{
} //getXxx()和setXxx()方法
public String getBrand()
{
return brand;
}
public void setBrand(String brand)
{
this.brand = brand;
} public int getPrice()
{
return price;
}
public void setPrice(int price)
{
this.price = price;
} public String getColor()
{
return color;
}
public void setColor(String color)
{
this.color = color;
}
}
07.16 创建对象做了哪些事情
Student s = new Student();在内存中做了哪些事情?
1.加载Student.class文件进内存
2.在栈内存为s开辟空间
3.在堆内存为学生对象开辟空间
4.对学生对象的成员变量进行默认初始化
5.对学生对象的成员变量进行显示初始化
6.通过构造方法对学生对象的成员变量赋值
7.学生对象初始化完毕,把对象地址赋值给s变量
07.17 什么时候定义成员变量
如果这个变量是用来描述这个类的信息的,那么,该变量就应该定义为成员变量。变量的范围越小越好,因为能及时的被回收。
07.18 长方形案例练习
定义一个长方形类,定义求周长和面积的方法,然后定义一个测试类Demo,进行测试。
/*
成员变量:长,宽
成员方法:
求周长:(长+宽)*2;
求面积:长*宽
*/
import java.util.Scanner;
class ChangFangXing
{
//长方形的长
private int length;
//长方形的宽
private int width; public ChangFangXing()
{
} //仅仅提供setXxx()即可
public void setLength(int length)
{
this.length = length;
} public void setWidth(int width)
{
this.width = width;
} //求周长
public int getZhouChang()
{
return (length + width) * 2;
} //求面积
public int getArea()
{
return length * width;
}
} //测试类
class Demo
{
public static void main(String[] args)
{
//创建键盘录入对象
Scanner sc = new Scanner(System.in); System.out.println("请输入长方形的长:");
int length = sc.nextInt();
System.out.println("请输入长方形的宽:");
int width = sc.nextInt(); //创建对象
ChangFangXing cfx = new ChangFangXing();
//先给成员变量赋值
cfx.setLength(length);
cfx.setWidth(width); System.out.println("周长是:"+cfx.getZhouChang());
System.out.println("面积是:"+cfx.getArea());
}
}
07.19 员工类案例练习
/*
成员变量:员工编号,姓名,年龄
构造方法:无参构造方法
成员方法:
getXxx()/setXxx();
show();
*/ class Employee
{
//员工编号
private String employeeId;
//姓名
private String name;
//年龄
private int age; //构造方法
public Employee()
{
} //getXxx()/setXxx()
public String getEmployeeId()
{
return employeeId;
} public void setEmployeeId(String employeeId)
{
this.employeeId = employeeId;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public int getAge()
{
return age;
} public void setAge(int age)
{
this.age = age;
} //显示所有成员信息的方法
public void show()
{
System.out.println("员工编号:"+employeeId+" 姓名:"+name+" 年龄:"+age);
}
} //测试类
class Demo
{
public static void main(String[] args)
{
//创建对象
Employee e = new Employee(); //给成员变量赋值
e.setEmployeeId("ID8899");
e.setName("旺财");
e.setAge(18); //获取数据
//System.out.println(e.getEmployeeId()+"---"+e.getName()+"---"+e.getAge()); //使用show方法
e.show();
}
}
07.20 实现加减乘除并测试
import java.util.Scanner;
class MyMath
{
//加法功能
public int add(int a,int b)
{
return a + b;
} //减法功能
public int sub(int a,int b)
{
return a - b;
} //乘法功能
public int mul(int a,int b)
{
return a * b;
} //除法功能
public int div(int a,int b)
{
return a / b;
}
} //测试类
class Demo
{
public static void main(String[] args)
{
//创建键盘录入对象
Scanner sc = new Scanner(System.in); System.out.println("请输入第一个操作数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个操作数:");
int num2 = sc.nextInt(); //创建MyMath对象,并使用
MyMath mm = new MyMath(); System.out.println(num1+"+"+num2+"="+mm.add(num1,num2));
System.out.println(num1+"-"+num2+"="+mm.sub(num1,num2));
System.out.println(num1+"*"+num2+"="+mm.mul(num1,num2));
System.out.println(num1+"/"+num2+"="+mm.div(num1,num2));
}
}
运行结果:
请输入第一个操作数:
8
请输入第二个操作数:
2
8+2=10
8-2=6
8*2=16
8/2=4
07.21 static关键字的引入
例:
class Person
{
String name;
//使用static修饰的数据称为对象的共享数据
static String country = "中国";
public void show()
{
System.out.println("姓名:"+name+" 国家:"+country);
}
} class Demo
{
public static void main(String[] args)
{
Person p1 = new Person();
p1.name = "小明";
p1.show(); Person p2 = new Person();
p2.name = "小红";
p2.country = "美国";
p2.show();
p1.show(); }
}
运行结果:
姓名:小明 国家:中国
姓名:小红 国家:美国
姓名:小明 国家:美国
07.22 static关键字的特点
1.static是一个修饰符,用于修饰成员(成员变量和成员函数)
2.static修饰的成员被所有的对象共享
3.static优先于对象存在,因为static成员随着类的加载就已经存在了
4.static修饰的成员可以被对象调用,也可以直接被类名调用,格式为:类名.静态成员
5.static修饰的数据是共享数据,对象中存储的是特有数据
07.23 static的内存图解
07.24 static的注意事项
1.在静态方法中是没有this关键字的
2.静态方法只能访问静态的成员变量和静态的成员方法
3.主函数是静态的,如果要在主函数中调用非静态成员可以创建一个对象来调用
07.25 静态变量和成员变量的区别
1.所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
2.内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
3.内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
4.调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
07.26 main方法的格式详细解释
JavaSE学习总结第07天_面向对象2的更多相关文章
- JavaSE学习总结第09天_面向对象4
09.01 final关键字引入 例: class Fu { public final void show() { System.out.println("访问底层资源"); ...
- JavaSE学习总结第08天_面向对象3
08.01 工具类中使用静态 例: class ArrayTool { //将构造方法私有,外界不能创建该类的对象 private ArrayTool(){} //遍历数组 public stat ...
- JavaSE学习总结第10天_面向对象5
10.01 运动员和教练案例分析 教练和运动员案例:运动员分乒乓球运动员和篮球运动员,教练分乒乓球教练和篮球教练.为了出国交流,跟乒乓球相关的人员都需要学习英语. 分析: 10.02 运动员和教练 ...
- JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性
27.01 反射_类的加载概述和加载时机 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载:就是指将class文件读 ...
- JavaSE学习总结第24天_多线程2
24.01 JDK5之后的Lock锁的概述和使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK ...
- JavaSE学习总结第11天_开发工具 & API常用对象1
11.01 常见开发工具介绍 1:操作系统自带的记事本软件 2:高级记事本软件例:Editplus,Notepad++,UltraEdit 3:集成开发环境 IDE(Integrated Deve ...
- JavaSE学习总结第23天_多线程1
23.01 多线程程序的引入 如果一个程序只有一个执行流程,所以这样的程序就是单线程程序. 如果一个程序有多条执行流程,那么,该程序就是多线程程序. 23.02 进程概述及多进程的意义 要想说 ...
- JavaSE学习总结第26天_网络编程
26.01 网络编程概述 网络编程:就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 26.02 网络模型概述和图解 计算机网络之间以何种规则进行通信,就是网络模型研究问题. ...
- JavaSE学习总结第15天_集合框架1
15.01 对象数组的概述和使用 public class Student { // 成员变量 private String name; private int age; // 构造方法 publ ...
随机推荐
- 在FL2440上使用kei MDK 调试程序(J-link)
<一>新建一个工程 单击Project ->New µVision Project...菜单项 <二>选择CPU 这里我们选择三星的2440A 点击OK后会提示你是否添加 ...
- NET CORE 应用程序启动
原文:Application Startup作者:Steve Smith翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程序提供 ...
- SQL语句的MINUS,INTERSECT和UNION ALL
SQL语句中的三个关键字:MINUS(减去),INTERSECT(交集)和UNION ALL(并集); 关于集合的概念,中学都应该学过,就不多说了.这三个关键字主要是对数据库的查询结果进行操作,正如其 ...
- android小知识之EditText输入框之值监控以及类型限制(数字,英语字母,下划线,是否为星号密码)
1.设置EditText的值监听事件 . <span style="font-size:14px;color:#990000;"> EditText ed=new Ed ...
- Android SharedPreference最佳实践
Android提供多种方式保存应用数据,其中一种方式是SharedPreferences,使用键值对保存私有基本的数据.所有的逻辑仅基于以下三个类: SharedPreferences SharedP ...
- VS2012生成绿色版程序的方法
方法就是在工程属性里设置: 配置属性-〉常规-〉项目默认值-〉MFC的使用-〉在静态库中使用MFC,见下图 之后重新编译即可.
- Speex manul中文版
Speex manul中文版 在VOIP的音频算法中,回音处理已经成为一个关系通话质量的主要问题. 回声的产生在IP网络主要有两种:1.声学回声2.电路回声 声学回声主要又分成以下几种:a ) 直 ...
- ZOJ 2562 More Divisors(高合成数)
ZOJ 2562 More Divisors(高合成数) ACM 题目地址:ZOJ 2562 More Divisors 题意: 求小于n的最大的高合成数,高合成数指一类整数,不论什么比它小的自然数 ...
- IE能够打开网页 可是chrome和火狐打不开网页解决的方法
一次偶然.电脑的浏览器打不开经常使用的网页,奇怪的是IE能够打开 之外的其它浏览器都不能够,结果百度一下.找到一个帖子,亲自測试一下,果真能够解决.记录例如以下: (1)開始-执行-输入CMD-确定- ...
- 本地yum源安装GCC
Linux环境下yum源安装GCC 前提条件是有Linux环境的安装盘ISO文件 在Linux系统中创建两个目录,一个是用来存放ISO文件,一个是用来挂载该ISO文件,如下: $mkdir /root ...