构造方法:

1:
#构造方法的名称必须与类名一样。
#构造方法的声明处不能有任何返回值类型的声明。
#不能在构造方法中使用人turn返回一个值

实例化对象时候调用构造方法

声明时候不调用构造方法

class Person
{
 public Person(){
  System.out.print("构造方法");
 }
}
public class test07
{
 public static void main(String args[]){
   Person per = null;//声明对象
   per = new Person();
 }
}

结果如下:

F:\test>javac test07.java

F:\test>java test07
构造方法

2:

在整个java操作中,如果一个类中没有明确的声明一个构造方法,则会自动生成一个无参数的什么都不做的构造方法,供用户使用。

class Person
{
 public Person(){
 
 }
}

3:

构造方法的主要作用是为类中的属性初始化,既然是方法,则方法中肯定可以传递参数。

此时定义一个构造,同时传递参数

class Person{
   private String name;
    private int age;
 public Person(String n,int a){
   this.setName(n);
   this.setAge(a);
 }
 public void setName(String n){
   name = n;
 }
 public void setAge( int a){
   if(a>=0&&a<=150){
   age = a;
   }
  
 }
 public String getName(){
   return name;
 }
 public int getAge(){
   return age;
 }
public void tell(){
  System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test07
{
 public static void main(String args[]){
   Person per = null;//声明对象
   per = new Person("张三",30);
   per.tell();
 }
}

结果为:

F:\test>javac test07.java

F:\test>java test07
姓名:张三 年龄:30

4:构造方法的重载

class Person{
   private String name;
    private int age;
 public Person(){}
 public Person(String n,int a){
   this.setName(n);
   this.setAge(a);
 }
 public void setName(String n){
   name = n;
 }
 public void setAge( int a){
   if(a>=0&&a<=150){
   age = a;
   }
  
 }
 public String getName(){
   return name;
 }
 public int getAge(){
   return age;
 }
public void tell(){
  System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test07
{
 public static void main(String args[]){
   Person per = null;//声明对象
   per = new Person("张三",30);
   per.tell();
 }
}

5:匿名对象:

在java中如果一个对象只是使用一次,则就可以将其定义为匿名对象、

class Person{
   private String name;
    private int age;
 public Person(){}
 public Person(String n,int a){
   this.setName(n);
   this.setAge(a);
 }
 public void setName(String n){
   name = n;
 }
 public void setAge( int a){
   if(a>=0&&a<=150){
   age = a;
   }
  
 }
 public String getName(){
   return name;
 }
 public int getAge(){
   return age;
 }
public void tell(){
  System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test07
{
 public static void main(String args[]){
   //Person per = null;//声明对象
   new Person("张三",30).tell();
   //per.tell();
 }
}

所谓的匿名对象只是在堆内存中开辟空间,而不存在栈内存的引用。。。

public class test07
{
 public static void main(String args[]){
   //Person per = null;//声明对象
   new Person("张三",30).tell();
   //per.tell();
 }
}

内部类:

1.1 什么是内部类?

#  一个类的内部还有类,就成为内部类。如果在类outer的内部再定义一个类inner,此时类inner就称为内部类,而类outer则称为外部类。

#  内部类可以声明为public或private,此时对其访问的限制于成员变量和方法完全相同。

1.2   内部类的定义格式

标示符 class 外部类的名称{
//外部类的成员
标示符 class 内部类的名称
{
//内部类的成员
}
}

[java] view plaincopyprint?

  1. class Outer

  2. {

  3. private String info="hello,word!";

  4. class Inner

  5. {

  6. public void print(){

  7. System.out.println(info);

  8. }

  9. };

  10. public void fun(){

  11. new Inner().print();

  12. }

  13. };

  14. public class Inner01

  15. {

  16. public static void main(String args[]){

  17. new Outer().fun();

  18. }

  19. }

结果为:

F:\java>javac Inner01.java

F:\java>java Inner01
hello,word!

1.3:内部类的缺点:

1:正常的一个类操作时,在类中最好只定义属性或方法。如果定义一个类的话,就破坏了程序的一个结构。

优点:

将以上的两个类变成两个独立的类,在分析:

[java] view plaincopyprint?

  1. class Outer

  2. {

  3. private String info="hello,word!";

  4. public void fun(){

  5. new Inner().print();

  6. }

  7. public String getInfo(){

  8. return this.info;

  9. }

  10. };

  11. class Inner

  12. {

  13. public void print(){

  14. System.out.println(new Outer().getInfo());

  15. }

  16. };

  17. public class Inner01

  18. {

  19. public static void main(String args[]){

  20. new Outer().fun();

  21. }

  22. }

以上程序实例了两个Outer对象,显然不合适:

可以这样改:

[java] view plaincopyprint?

  1. class Outer

  2. {

  3. private String info="hello,word!";

  4. public void fun(){

  5. new Inner(this).print();

  6. }

  7. public String getInfo(){

  8. return this.info;

  9. }

  10. };

  11. class Inner

  12. {

  13. private Outer out=null;

  14. public Inner(Outer out){

  15. this.out=out;

  16. }

  17. public void print(){

  18. System.out.println(new Outer().getInfo());

  19. }

  20. };

  21. public class Inner01

  22. {

  23. public static void main(String args[]){

  24. new Outer().fun();

  25. }

  26. }

结果为:

F:\java>javac Inner01.java

F:\java>java Inner01
hello,word!

:1.4:

如果内部类拿到外部以后,会发现代码增加了,而且复杂度也增加了,使用内部类的最大优点:可以方便访问外部类中的私有属性。

但是以上的内部类是无法在外部直接使用的,

1.5:使用static声明内部类

如果一个内部类使用static关键字声明,则此内部类就成为外部类,可以直接通过外部类进行访问。

转载于:https://blog.51cto.com/1095221645/1427052

Java笔记9:构造方法,内部类相关推荐

  1. 【java笔记】File类(1)概述,静态成员,构造方法

    [java笔记]File类(2):常用方法_m0_52043808的博客-CSDN博客 java.io.File类: 文件和目录路径名的抽象表示. ●java把电脑中文件和文件夹(目录)封装为了一个F ...

  2. Java编程笔记7:内部类

    Java编程笔记7:内部类 图源:PHP中文网 所谓的内部类,其实就是定义在类中的类.这和Java编程笔记6:接口 - 魔芋红茶's blog (icexmoon.xyz)中提到的接口嵌套的方式有点相 ...

  3. Java笔记:抽象类和接口

    Java笔记:抽象类和接口 抽象类 接口 接口多重实现 接口继承接口 嵌套接口 工厂模式 抽象类 在普通类中,一个类必须实现自身写的所有方法,每个方法必须含有自己的方法体.即便先创建一个父类,再由后续 ...

  4. java笔记1/3 (B站hsp学java)

    JAVA基础 文章目录 JAVA基础 变量 整形(INT) 浮点型(float/double) 字符型(char) 布尔类型(boolean) 基础数据类型的转换 自动类型转换 强制类型转换 重载 可 ...

  5. Java笔记-Java日常笔记-Java核心语言-史上最全Java笔记-Java烂笔头-实时更新(~v~)

    阿一的日常Java笔记,实时更新,有什么问题可以留言交流一下,大家一起共同进步!!! 1.Java基础 1.1.基本语法 1.1.1.关键字 ​ 定义:被java赋予特殊含义的字符串(单词): ​ 关 ...

  6. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  7. java笔记(3):String(2)

    java笔记(3):String(2) 参考资料:网易云网课李兴华:http://study.163.com/course/courseMain.htm?courseId=1455026 一.字符串一 ...

  8. Java笔记04-核心类库

    Java笔记04-核心类库 Object类 1.1 常用的包 java.lang包 -该包是Java语言中的核心包,该包中的内容由Java虚拟机自动导入 如:String类,System类等java. ...

  9. Java笔记03-Constructor Override

    Java笔记03-Constructor & Override 构造方法基本概念 构造方法是类中的一种特殊方法 它是在类创建对象(实例化)的时候自动调用的方法 这个和python中的__ini ...

  10. 菜鸟学Java笔记1

    这两天通过视频和书籍在自学java.每天学一点,每天做一点笔记,希望有所收获! 1,Java运行中的内存分配 理解内存的分配,也就理解了一切.对于java而言,内存分为四块:代码区(code)/数据区 ...

最新文章

  1. 2022-2028年中国电商物流行业投资分析及前景预测报告
  2. Python 相对路径问题:“No such file or directory“,原因及解决方法
  3. android novate乱码,Android RxJava+Retrofit2+RxBinding
  4. MFC 蜂鸣声或播放音频
  5. 深入理解编译优化之循环展开和粗化锁
  6. JEPaaS笔记||学习培训资料||案例视频 【全套】
  7. GTADIR check object exist in another system
  8. vue中注意watch的执行顺序
  9. MySQL filesort优化案例一则
  10. ubuntu完全卸载mysql
  11. 触屏java版象棋下载 游戏下载安装_中国象棋官方版下载
  12. 新移动硬盘 测试软件,西部数据移动硬盘检测工具WD Drive Utilities 2.0.0.54中文免费版...
  13. c语言课程火车售票报告,C语言课程设计报告书火车票务管理系统.doc
  14. WebLogic安装教程
  15. App自动绑定的五大应用场景
  16. android 焦点的作用,详细介绍Android中的视图焦点Focus的使用
  17. 个税计算、税基的处理
  18. 中国智能互动纺织品市场趋势报告、技术动态创新及市场预测
  19. docker提交比赛记录
  20. ISIS-广播网络DIS更新LSDB

热门文章

  1. (原+转)使用opencv的DFT计算卷积
  2. 【习题0】准备工作【第0天】
  3. Milking Grid poj2185
  4. hibernate笔记(一)
  5. c++ 一个简单的学生 类
  6. caffeine 弱引用key的实现
  7. 怎么做才能将请求平摊到多台服务器上面去呢
  8. for range循环通道
  9. php-fpm进程利用CPU不均问题的优化过程
  10. redis专题:redis面试题汇总