Java学习笔记之------构造函数,静态关键字,静态代码块,构造代码块,局部代码块

  • 构造函数
    • 构造函数的重载
      • 静态关键字static
        • 静态代码块
          • 构造代码块

构造函数

一般函数:用于描述事物应该具备的功能
构造函数:也是描述功能,不过比较特殊,是专门用于给对象进行初始化的

示例:在我们创建类Person时,设置姓名需要用到set,get方法,但就像人一样,在我们上户口之前,我们是没有自己的姓名的,但没有自己的姓名不代表没有自己的昵称,我们每个人在出生时,都会喜提昵称“小宝贝”一枚~。那么在Java中如何实现呢------使用构造函数

class Person{private String name;//set,get方法public void setName(String n){name = n; }public String getName(){return name;}public void show(){System.out.print("name="+name);}
}
public class PersonDemo{public static void main(String args[]){Person p = new Person();p.setName("vincy");p.show();}
}

定义一个构造函数,给Person对象初始化

class Person{private String name;//定义一个构造函数,给Person对象初始化Person(String name){this.name = name;}/*public void setName(String n){name = n; }public String getName(){return name;}*/public void show(){System.out.print("name="+this.name);}}
public class PersonDemo{public static void main(String args[]){//Person对象一开始就有姓名Person p = new Person("litter baby");//p.setName("vincy");p.show();}
}

构造函数的格式:
函数名与类名相同
没有返回值类型
没有具体的返回值
注意:一般函数可以和类名相同,但不规范,所以一般首字母都小写

构造函数与一般函数的区别:
运行上的区别
构造函数在对象创建时就已经执行了,而且只执行一次
一般函数是在对象创建后,需要时被对象调用,可以调用多次

对象是如何初始化的?
定义的每一个类中,都有一个默认的空参数构造函数。而一旦在类中自定义了构造函数后,默认的构造函数就不存在了。

/*
class 类名{//类中默认的空参构造函数,专门用于对象初始化类名() {}
}
*/

构造函数中有return语句吗?
有,作用是用来结束初始化。

构造函数可以私有化吗?
构造函数可以私有化,只在本类中使用。且构造函数一旦私有化,其他程序就无法创建该类的对象。因为无法对创建的对象初始化。

构造函数私有化如何访问?
首先需要清楚的是,构造函数只能被构造函数调用,不能被一般方法调用。而构造函数之间的访问是通过this关键字实现的
且当成员变量和局部变量同名时,可通过this关键字区分

class Person{private String name;private int age;//构造函数私有化private Person(String name){this.name = name;}//this关键字调用Person(String name,int age){this(name);this.age = age;//this关键字区分成员变量局部变量}public void show(){//this关键字区分成员变量局部变量System.out.println("name="+this.name+",age="+this.age);}
}
public class PersonThis{public static void main(String args[]){Person p = new Person("litter baby",2);p.show();}
}


注意:用于调用构造函数的this语句必须在第一行,因为初始化动作要先执行

一道小练习

//判断是否是同龄人的功能
class Person{private String name;private int age;//初始化Person(String name,int age){this.name = name;this.age = age;    }public boolean equalsAge(Person pp){/*if (pp.age == this.age){return true;}else{return false;}*/     return pp.age == this.age;}
}
public class EqualsAge{public static void main(String args[]){Person p1 = new Person("lily",21);Person p2 = new Person("lucy",22);boolean b = p1.equalsAge(p2);System.out.print("b="+b);}
}

构造函数的重载

class Person{private String name;private int age;//构造函数初始化Person(String name){this.name = name;}Person(String name,int age){this.name = name;this.age = age;}Person(){        }public void show(){System.out.println("name="+this.name+",age="+this.age);}
}
public class PersonOverload{public static void main(String args[]){Person p1 = new Person();Person p2 = new Person("litter baby");Person p3 = new Person("litter baby",2);p1.show();p2.show();p3.show();}
}

静态关键字static

定义:
1、被静态修饰符修饰的成员,可以直接被类名调用
2、静态成员优于对象存在
3、静态成员随类的加载而加载,随类的消失而消失,静态成员周期 很长
3、静态方法只能访问静态成员,不可访问非静态成员,这是静态方法的访问局限性
4、静态方法中不能出现this或者super关键字
5、主函数是静态的

成员变量和静态变量的区别
名称上:成员变量也称实例变量,静态变量也称类变量
内存存储上:成员变量存储在堆内存中,静态变量存储在方法区的静态区
生命周期上:成员变量随对象的出现而出现,随对象的消失而消失。静态变量随的出现而出现,随类的消失而消失。

怎么用和什么时候用?
直接用于修饰成员
成员变量时:如果数据在所有对象中都是一样的,直接静态修饰
成员函数时:如果函数没有访问过对象中的属性数据,那么该函数是静态的

示例
当创建对象去调用某个方法时,该方法没有涉及到对象中的数据,该对象的建立是没有意义的。
我们可以通过类名的方式调用,即类名.方法名();
但要注意的是,被调用的方法需要用static修饰符修饰。
在函数没有访问到对象中的属性时,就可以使用该方法调用。

class Person{private String name;private int age;private String ID;//共有属性static String country = "CNINA";Person( String name,int age,String ID){this.name=name;this.age = age;this.ID = ID;}   //创建一个sleep方法,只单纯输出,并不需要使用name,age等//使用类名的方式访问,该方法需要使用静态修饰符staticpublic static void sleep(){System.out.print("呼呼");}public void show(){System.out.println("name="+name+",age="+age+",ID="+ID);//类名方式调用共有属性System.out.println("FROM:"+Person.country);}
}
public class StaticDemo{public static void main(String args[]){Person p1 = new Person("vincy",21,"1223");Person p2 = new Person("lily",22,"1023");p1.show();p2.show();//类名方式调用Person.sleep();}
}

静态代码块

概念:随着类的加载而执行,且只执行一次
作用:对类进行初始化
应用场景:类不需要创建对象,但需要初始化。将部分代码存储到静态代码块中

class Demo{//只能访问静态成员static int num;//静态代码块static{int num = 20;System.out.println(num);}static void show(){System.out.println("OVER");}
}
public class StaticCodeBlog{public static void main(String args[]){Demo.show();Demo.show();}
}

构造代码块

概念:定义在类中的非静态代码块。
用处:给所有对象进行初始化。

class Demo{private String name;private int age;//构造函数Demo(String name,int age){this.name = name;this.age = age;System.out.println("name="+this.name+",age="+this.age);}void test(){System.out.println("TEST!");}//构造代码块{test();}
}
public class ConstructDemo{public static void main(String args[]){Demo d1 = new Demo("lily",20);Demo d2 = new Demo("lucy",22);        }
}


补充

局部代码块:用于控制变量的生命周期,用完即弃。

public class PartDemo{public static void main(String args[]){int x = 3;//局部代码块{System.out.println("TEST");}System.out.println("x="+x);}
}

public class PartDemo{public static void main(String args[]){//int x = 3;//局部代码块{   //将变量x放进局部代码块int x = 3;System.out.println("TEST");}System.out.println("x="+x);}
}


文章为学习笔记,如有不足之处还请指正

构造函数,静态关键字,静态代码块,构造代码块,局部代码块相关推荐

  1. java 代码块(局部代码块、实例代码块、静态代码块、同步代码块)

    1 引言 代码块是类的成分之一:成员变量,方法,构造器,代码块,内部类. 在Java中,使用 { } 括起来的代码被称为代码块(Code block) 1.1 代码块的分类 根据其位置和声明的不同,可 ...

  2. [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)

    参考链接: Java程序的输出| 构造函数 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ 1. 静态代码块在类加载时即运行,而且 ...

  3. 静态代码块,构造代码块,局部代码块演示

    public class Test{static int num;static int numObj;//记录有多少个对象产生!static{//静态代码块, 是用来给类进行初始化的!//num = ...

  4. 静态代码块 构造代码块 构造方法的执行顺序

    今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 执行顺序: 静态代码块>构造代码块>构造方法体 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构 ...

  5. 代码块(局部代码块、构造代码块、静态代码块)

    代码块的概述 在Java中,使用{}括起来的代码被称为代码块 代码块的分类 根据位置和声明不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块 局部代码块:在方法中出现,限定变量生命周期,及早 ...

  6. Java. Static 修饰类_static 表示静态,它可以修饰属性,方法和代码块。

    (1)static 表示静态,它可以修饰属性,方法和代码块. 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有.这个属性就 ...

  7. 【第一阶段 day23 面向对象】构造方法 构造代码块与局部代码块 this

    1.构造方法 1.格式 没有返回值类型,且方法名与本类类名一致的方法 2.作用 用来创建对象,每次触发,都可以创建一个对应的对象 3.注意事项 (1)每一个类默认一个无参构造 (2)一旦提供了其他的构 ...

  8. 写一个静态HTML页面,直接写HTML代码和用JS动态生成代码,哪种方式要好

    如果写一个静态HTML页面,直接写HTML代码和用JS动态生成代码,哪种方式要好点?为什么? 不考虑人力因素(手写HTML太费时间排除),请从读取和解析或者其他的角度分析.谢谢 添加评论 分享 按投票 ...

  9. HTML5期末大作业:淘宝网站设计——仿2021淘宝首页(1页) 大学生网页制作教程 表格布局网页模板 学生HTML静态水网页设计作业成品 简单网页制作代码 学生商城网页作品免费设计

    HTML5期末大作业:淘宝网站设计--仿2021淘宝首页(1页) 大学生网页制作教程 表格布局网页模板 学生HTML静态水网页设计作业成品 简单网页制作代码 学生商城网页作品免费设计 常见网页设计作业 ...

  10. 《大话数据结构》5一文学会数据结构中的静态链表存储结构(概念,实例,代码)

    静态链表 1.静态链表基本介绍 (1)静态链表:用数组来代替指针,来描述单链表.我们把用数组描述下标的链表叫做静态链表.也叫游标实现法. (2)首先让数组的元素是两个数据域组成,data 和cur.也 ...

最新文章

  1. java日历教程_JAVA Calendar方法使用基础教程详解
  2. 流媒体传输协议---RTP--基础
  3. FPS, VSync, Triple Buffering
  4. nodejs TCP服务器和客户端通信的socket结构
  5. [CQOI]九连环(FFT优化+高精)
  6. 如何维持手机电池寿命_充电小知识:你知道如何正确充电吗?这几种充电方式最损害电池...
  7. 自然语言处理-LDA主题模型
  8. 从外部调用Django模块
  9. ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME
  10. log4j2日志配置
  11. 从技术角度看人人网,互联网营销
  12. 华尔街日报:微软告别盖茨时代
  13. 【c++ templates读书笔记】【4】技巧性基础知识
  14. 物质为何能在虚空粒子海中存在
  15. Ovito教程:高清大图渲染方法
  16. vant中picker选择器
  17. 原 《老路用得上的商学课》86-90学习笔记
  18. 火灾自动报警系统 切换模块
  19. react 打包体积过大_create-react-app andt 打包的 js 文件过大
  20. 常见功能测试点的测试用例大全

热门文章

  1. oracle minus intersect,minus,oracle中INTERSECTMINUS用法
  2. [受限玻尔兹曼机] 原理、求解过程推导、深度信念网络
  3. 从CAP 到编程语言的猜想
  4. CodeForces - 999C Alphabetic Removals
  5. 企业版360忘记密码卸载
  6. Google 2017 上海开发者大会 总结
  7. 【金猿案例展】某新型股份制商业银行——客服智能质检系统建设
  8. php公众号上传网络图片_PHP通过CURL上传图片(微信公众号上传素材)
  9. Maven的下载和配置(一)
  10. 飞机大战游戏python_《飞》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...