Java学习----day5——(3)面对对象程序设计基础篇(具体篇)
本文承接之前class设计
1.代码块
代码块分类:1.普通代码块 2.静态代码块 3.构造代码块
1.1普通代码块
按照顺序执行,调用即执行;只调用第一次实例化;
1.2 构造代码块
每次实例化对象即调用
1.3 静态代码块
调用优先级最高!不管是否在主函数内。!只调用一次;
package com.Example.chapter04;
/**
* @author Administrator
* @function : 代码块的理解
* 1.普通代码块(11-15)
* 2.构造代码块(17-19)
* 3.静态代码块(24-26)不管产生多少引用,只调用一次
*
*/
public class CodeBlock {
public static void main(String[] args)
{
new CodeBlock();
new CodeBlock();
new CodeBlock();
}
{
System.out.println("这是普通代码块");
}
public CodeBlock(){
System.out.println("这是 ---------就是构造方法啦");
}
static {
System.out.println("这是静态代码块------就是用static标识的代码块");
}
}
2.堆内存和栈内存详解(数组只是初步了解)
2.1堆内存
是完全不知道数据的储存方式,简单理解就是用来存储数组和对象的
2.2栈内存
需要知道数据的存储方式(C++里面碰见过一次,是把形参用到定义数组的长度,需要动态指针,即使用关键字new,我认为是使用堆内存进行初始化)。也就是说用来存储定义好的参数。
3.匿名类
不在栈内存中申请空间进行引用,new 类名();
上面代码块就用到了代码块的概念。
new Demo().outPut();
4.static关键字
1.首先,说个例子,统计该类被实例化多少次,定义变量static int count;count++;这下我们可以看出static的含义。
2.全局变量和全局方法;
3.需要注意的是静态方法只能调用静态变量;
4.调用格式:类名.标识符;
package com.Example.chapter04;
/**
* @author Administrator
* @function : Static的理解
* 1作为各个引用的共享资源
* 2通过类名直接调用
* 3static标明的方法中不能使用非static变量
*/
public class StaticDesign {
public StaticDesign(){
StaticDesign.count++;
System.out.println("生成新的实例引用"+"\t这是第"+StaticDesign.count+"个实例");
}
public int check=0;
public static int count=0;
public static void outPut(){
System.out.println("这是静态方法");
}
public static void main(String args[]){
StaticDesign Demo1=new StaticDesign();
StaticDesign Demo2=new StaticDesign();
StaticDesign Demo3=new StaticDesign();
StaticDesign.outPut();
Demo1.outPut();
}
}
5.this关键字
- 调用成员变量和成员方法
- 调用构造方法
- 表示当前对象
this()只能在构造函数直接互相调用必须放在函数体第一行,并且需要留出一个构造函数作为出口,即某一个构造函数不使用this();
package com.Example.chapter04;
/**
* @author Administrator
* @function : this的三大特效
* 1.成员属性
* 2.构造方法
* 3.当前对象
*/
public class ThisDesign01 {
public static void main(String[] args) {
PersonAgain personagain=new PersonAgain(23, "光唯");
personagain.getInfo();
}
}
class PersonAgain{
private int age;
private String name;
public PersonAgain(){
System.out.println("此处Person类无参构造函数发言");
}
public PersonAgain(int age,String name){
this();//第二种 构造方法的调用
this.setAge(age);
this.setName(name);
System.out.println("此处Person类有参构造函数发言"+"\t姓名"+this.getName()+"\t年龄"+this.getAge());
}
public void getInfo(){
System.out.println("试试第三种this的用法"+this);
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;//第一种 成员变量的用法
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//第一种 成员变量的用法
}
}
6.私有属性的访问
- 本类引用传递
package com.Example.privateVisit;
/**
* @author Administrator
* @date : 2017年3月26日 下午3:06:08
* @function : 本类传递访问私有属性
*/
public class SelfConvey {
private int temp=100;
public void changeTemp(SelfConvey SC){
SC.temp=50;
}
public int getTemp(){
return this.temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SelfConvey aa=new SelfConvey();
aa.changeTemp(aa);
System.out.println(aa.getTemp());
}
}
- 单例模式
好像只能解决构造方法私有化 - 内部类(暂且放下)
- set和get方法(this里面都是这种)