构造方法:

构造方法是一种特殊的方法,用于创建该类的对象,对对象的数据进行初始化

格式如下:

  [修饰符] 类名(形参列表){

    方法体

  }

特点 A:方法名和类名相同

   B:没有返回值类型,连void都不能有

   C:没有返回值

   D:通过new关键字比如 类名 对象名 = new 类名(); 代表调用了该类的无参构造方法

构造方法注意事项:

  1.如果自己不创建构造方法,系统会自动提供一个无参构造,一般建议自己手动创建

  2.如果自己创建了有参构造方法,系统将不默认创建无参构造方法     

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;
}
}
class StudentDemo {
public static void main(String[] args) {
//方式1
Student s1 = new Student();
s1.setName("徐佳文");
s1.setAge();
System.out.println(s1.getName()+"---"+s1.getAge()); //方式2
Student s2 = new Student("刘源",);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}

结果:

 问:代码:Student s = new Student();做了哪些事情?(理解)

  1.把Student.class文件加载到内存

  2.在栈内存为S开辟空间

  3.在堆内存为学生对象申请空间

  4.给学生的成员变量进行默认初始化 name=null; age=0;

  5.通过构造方法给成员变量进行初始化 //Student s = new Student("刘源",38);直接 name="刘源";age=38;

  6.对象构造完毕,把地址赋值给S变量 

this关键字

在普通方法中,this指向的是调用该方法的对象

在构造方法中,this指向的是正要初始化的对象

this最常的用法:

  1.让类中的一个方法,访问该类的另一个方法或属性

  2.使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句

特别备注,this不能用于static方法

 使用示例

public class TestThis {
int a,b,c; TestThis(){
System.out.println("正要new一个Hello对象");
} TestThis(int a,int b){
this(); //调用无参的构造方法,并且必须位于第一行! //a = a;//这里都是指的局部变量而不是成员变量
this.a = a;//这样就区分了成员变量和局部变量. 这种情况占了this使用情况的大多数!
this.b = b;
} TestThis(int a,int b,int c){
this(a,b); //调用无参的构造方法,并且必须位于第一行!
this.c = c;
} void sing(){} void chifan(){
this.sing(); //sing();
System.out.println("你妈妈喊你回家吃饭!");
} public static void main(String[] args){
TestThis hi = new TestThis(,);
hi.chifan();
}
}

  结果:

static关键字:

在类中用static声明的变量为静态变量,声明的方法为静态方法,也被称为类变量,类方法

因为 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入的时候就会初始化,在对象创建之前就已经初始化了

对于该类来说,static成员变量只有一份,被该类所有变量共享

被该类声明的方法属于静态方法,无需创建对象就可以调用,因为static修饰的方法变量,在对象创建之前就存在,所以调用可以直接类名.方法名调用

在调用该方法时,不会将对象的引用传递给它,所以在静态方法中不可方法非static成员

可以通过对象引用或类名(不需要创建对象)来访问它

public class TestStatic {
int a;
static int width;
static void gg(){
System.out.println("gg");
}
void tt(){
System.out.println("tt");
}
public static void main(String[] args) {
TestStatic ts = new TestStatic();
//ts.gg();可以被对象调用
TestStatic.gg();//可以直接类名.静态方法名调用
gg();//这个静态方法在当前类中,所以可以直接用方法名在main方法中调用
//tt();错!! 静态方法无法访问非静态方法或变量
//int b=a; 错!!静态方法无法访问非静态方法或变量
int w = width;
}
}

静态代码块:用static修饰的代码块被称为静态代码块

经常用于初始化类,加载类信息时执行,一定要记住,在值加载类信息时执行,而不是创建对象时执行

静态初始化块中不能方法非static成员

package cn.zzsxt.demo;

public class TestStaticBlock {
//静态代码块
static { System.out.println("此处,可执行类的初始化工作!"); }
//构造代码块
{
System.out.println("此处,构造代码块");
} public static void main(String[] args) {
System.out.println("main方法中的第一句");
TestStaticBlock tb = new TestStaticBlock();
//随着类的加载而调用了静态代码块,然后main方法中第一句话出来,随着创建对象,构造代码块也加载 所以结果如下:
/*
此处,可执行类的初始化工作!
main方法中的第一句
此处,构造代码块*/
} }

java中构造方法和this,static关键字的更多相关文章

  1. java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样

    一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...

  2. Java中get()方法和set()方法如何使用?

    在java中,为了保证数据的安全性,我们会把数据定义为private等(私有.封装),如果想要调用就会用到set()方法与get方法或者构造函数方法.这里说的是第一种方法,set()与get(),既然 ...

  3. java中equals方法和contentEquals方法区别

    java中,String类里提供了两种字符串的比较方式(算上“==”应该是三种) String line1 = new String("0123456789"); String l ...

  4. Java基础构造方法和this关键字整理

    构造方法 8.1构造方法介绍 构造方法的格式: 修饰符 构造方法名(参数列表) { } l  构造方法的体现: n  构造方法没有返回值类型.也不需要写返回值.因为它是为构建对象的,对象创建完,方法就 ...

  5. java中paint方法和paintComponent方法的不同

    /* 1.由Component.java源代码中可以看见其中的paint()方法体是空的,在Container中重写了该方法,其子类Window等也重写了该方法 2.由JComponent.java源 ...

  6. Java中sleep方法和wait的详细区别

    1.两者的区别 对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. 这两个方法来自不同的类分别是Thread和Object 最主要是 ...

  7. Java 中 sleep 方法和 wait 方法的区别?

    虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件 ...

  8. Java基础笔记(十四)——面向对象(续)【构造方法和this关键字】

    一.构造函数的规则 1.构造方法是用来在对象实例化时初始化对象的成员变量的,以完成对象的初始化工作. 2.构造方法与类名相同且没有返回值(返回值也不能为void型).如:public 构造方法名( ) ...

  9. Java中synchronized 修饰在static方法和非static方法的区别

    [问题描述]关于Java中synchronized 用在实例方法和对象方法上面的区别 [问题分析]大家都知道,在Java中,synchronized 是用来表示同步的,我们可以synchronized ...

随机推荐

  1. 走入PHP-初次见面

    FROM:实验楼 Linux启动WEB服务器: $ sudo service apache2 start 新建并打开test.php文件: $ sudo gvim /path/test.php PHP ...

  2. java做帐户登录失败锁定

    对于连续失败登录应用系统5次的帐号,需锁定该帐号至少30分钟不允许登录. 这里也用简单的map集合进行判定,功能能实现,但并不是很完美,不用更改数据库的表字段 1.首先建立一个用户登陆失败的实体类 p ...

  3. 性能测试分享:Jmeter的api监控工具解决方案

    性能测试分享:Jmeter的api监控工具解决方案 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询q ...

  4. 手机自动化测试:appium源码分析之bootstrap十四

    手机自动化测试:appium源码分析之bootstrap十四   poptest(www.poptest.cn)是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开 ...

  5. 性能调优之MYSQL高并发优化

    性能调优之MYSQL高并发优化   一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之 ...

  6. 第一章开发简单的Java应用程序

    1.什么是程序? 程序一词来源于生活,通俗点讲就是把生活的的事用程序编写出来 并执行. 2.为什么要学习Java呢? Java是Sun Microsystems于1995年推出的高级编程语言 Java ...

  7. Parse error: syntax error, unexpected '[' in D:\phpStudy\WWW\tp5\thinkphp\library\think\Loader.php on line 18

    g刚学习tp5就遇到了这个问题  百思不得其解,看到官网说明 是基于PHP5.4 设计的  打开 phpstudy版本一看 就呵呵呵了 .还是5.3的版本.更换版本之后 就ok了.

  8. firefox上安装selenium ide失败

    Selenium 初学者第一步: 最近在学习selenium,但是在安装的时候遇到了问题.我是直接在firefox安装的Selenium IDE ,虽然下载安装之后存在于扩展中,但是工具栏里并没有显示 ...

  9. java复习(8)---I/O

    本节复习java常用i/o,输入输出流. 先放上样例代码.方便参考,可以轻松看懂. package re08; import java.io.*; import java.util.Scanner; ...

  10. UEditor使用------图片上传与springMVC集成 完整实例

    UEditor是一个很强大的在线编辑软件 ,首先讲一下 基本的配置使用 ,如果已经会的同学可以直接跳过此节 ,今天篇文章重点说图片上传; 一  富文本的初始化使用: 1 首先将UEditor从官网下载 ...