构造函数

构造函数的作用:给对应的对象进行初始化。

构造函数定义的格式:

修饰符   函数名(形式参数){

函数体...

}

构造函数要注意的细节:

  1. 构造函数是没有返回值类型的
  2. 构造函数的函数名必须与类名一致
  3. 构造函数并不是我们手动调用的,而是在创建对应的对象时,jvm就会主动调用到对应的构造函数
  4. 如果一个类没有显式的写上一个构造方法时,那么Java编译器会为该类添加一个无参的构造函数的。
  5. 如果一个类已经显式写上一个构造方法时,那么java编译器则不会再为该类添加一个无参的构造方法。
  6. 构造函数时可以在一个类中以函数重载的形式存在多个的

java编译器为我们添加的构造方法的权限修饰符与类的权限修饰符一致/

jdk提供了一个开发工具(javap.exe)给我们进行反编译。

javap反编译工具的使用格式:

javap   -c(反编译代码)  -l(打印行号和本地变量表)   -private (显示类和所有成员)  类名

构造函数与普通函数的区别:

  1. 构造函数时没有返回值类型的
  2. 普通函数是有返回值类型的,即使函数没有返回值,返回值类型也要写上void
  3. 构造函数的函数名必须要与类名一致
  4. 普通函数的函数名只要符合标识符的命名规则即可
  5. 构造函数是在创建的时候由jvm调用的
  6. 普通函数是由我们使用对象调用的,一个对象可以调用多次普通的函数
  7. 构造函数的作用用于初始化一个对象
  8. 普通函数是用于描述一类事物的公共行为的

构造代码块:给对象进行统一的初始化。

构造代码块的格式:

{

构造代码块;

}

注意:构造代码块的大括号必须位于成员位置上。

代码块的类别:

  1. 构造代码块
  2. 局部代码块         大括号位于方法之内            作用:缩短局部变量的生命周期,节省一点点内存
  3. 静态代码块

构造代码块要注意的事项:

  1. java编译器b编译一个java源文件的时候,会把成员变量的声明语句提前至一个类的最前端。    (注意是声明,不是赋值)
  2. 成员变量的初始化工作其实都是在构造函数中执行的。
  3. 一旦经过java编译器b编译后,那么构造代码块d的代码就会被移动到构造函数中执行,是在构造函数前面执行的,构造函数中的代码是最后执行的。
  4. 成员变量的显式初始化与构造代码块的代码是按照当前代码的顺序执行的。

如果存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java采取的是就近原则的机制访问的。)

 public class Creative {

     public static void main(String[] args) {
// TODO Auto-generated method stub
Animal a=new Animal();
a.eat();
} }
class Animal{
String name="狗";
String color;
public void eat() {
String name="鸡";
System.out.println(name+"在吃.");
}
}

比如这里就是鸡在吃而不是狗在吃。

ps:栈内存又叫方法栈,一个方法要运行的时候,jvm会在栈内存中开辟一片属于这个方法的空间,让这个方法在这片空间执行

this关键字:this关键字代表了所属函数的调用者对象

this关键字的作用:

  1. 如果存在同名的成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据。
  2. 在一个构造函数中,可以调用另外一个函数初始化对象。     this(形式参数1,形式参数2...),调用本类的对应数量参数的构造方法

this关键字要注意的事项:

  1. 如果存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java采取的是”就近原则“的机制访问的。)
  2. 如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下,那么java编译器会在该变量的前面添加this关键字。

一个函数的形式参数也是属于局部变量

public Student(String name,int id) {
name=name; //这里的两个name都是局部变量的name,也就是形式参数的name,而不会对成员变量的name造成改变,相当于局部变量自己给自己赋值
id=id; //同理
}

正确的应该是这样:

public Student(String name,int id) {
this.name=name; //局部变量的name给成员变量赋值
this.id=id;
}

this的第二个作用:比如说,在两个参数的构造方法中调用一个参数的构造方法

class Student{
String name;
int id; public Student(String name,int id) {
this(name); //调用本类中一个参数的构造方法
//this.name=name; //局部变量的name给成员变量赋值
//this(); //无参的构造方法被调用
this.id=id;
System.out.println("两个参数的构造方法被调用了");
}
public Student(String name) {
this.name=name;
System.out.println("一个参数的构造方法被调用");
}
public Student() {
System.out.println("无参构造方法被调用");
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
Student s=new Student("狗娃",110);
System.out.println("姓名: "+s.name+"身份证: "+s.id);
}

this关键字调用其他构造函数要注意的事项:

    1. this关键字调用其他的构造函数时,this关键字必须要位于构造函数中的第一个语句
    2. this关键字在构造函数中不能出现相互调用的情况,因为是一个死循环

方法区(数据共享区):数据共享

static修饰的成员变量(静态成员变量)  只会在数据共享区中维护一份,而非静态成员变量的数据会在每个对象中都维护一份的。         但是某个修改这个静态变量,就会影响所有的对象的属性

static (静态\修饰符)

  1. static修饰成员变量        :  如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰
  2. static修饰成员函数

静态成员变量的访问方式:

  1. 可以使用对象进行访问          格式:对象.变量名
  2. 可以使用类名进行访问          格式:类名.变量名

注意:

  • 非静态的成员变量只能使用对象进行访问,不能使用对象进行访问。
  • 千万不要为了方便访问数据而使用static修饰成员变量,只有成员变量的数据是真正需要被共享的时候才使用static修饰

static修饰成员变量的应用场景:   如果一个数据需要被所有对象共享使用的时候,这时候即可使用static修饰

class Emp{
static int count=; {
count++;
} public Emp() {
} public void showCount() {
System.out.println("创建了"+count+"个对象");
}
} public class Count { public static void main(String[] args) {
// TODO Auto-generated method stub
Emp e1=new Emp();
new Emp();
new Emp();
new Emp();
new Emp();
e1.showCount();
} }

Java学习笔记(7)的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  10. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

随机推荐

  1. 8.0docker的客户端和守护进程

    C/S 链接的方式 unix:///var/run/docker.sock 默认的 tcp://host:port fd://socketfd 在linux上进行socket 模拟 nc -U /va ...

  2. Fiddler抓取HTTPS协议

    HTTPS协议握手过程: 1,客户端明文请求,把自己支持的非对称加密算法(用于使用CA证书公钥加密计算生成协商密钥的随机数per_master).对称加密算法(用于以后使用协商密钥加密传输内容).验证 ...

  3. splay:优雅的区间暴力!

    万年不更的blog主更新啦!主要是最近实在忙,好不容易才从划水做题的时间中抽出一段时间来写这篇blog 首先声明:这篇blog写的肯定会很基础...因为身为一个蒟蒻深知在茫茫大海中找到一个自己完全能够 ...

  4. perl6中字符串字母编历

    use v6; my $input = prompt '输入字符串:'; for $input.words -> $word { say $word; } for $input.comb -&g ...

  5. python基础===getattr()函数使用方法

    getattr(object, name[,default]) 获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选.需要注意的是,如果是返回的对象的方法,返回的 ...

  6. spark 环境搭建坑

    spark的新人会有什么坑 spark是一个以java为基础的,以Scala实现的,所以在你在安装指定版本的spark,需要检查你用的是对应spark使用什么版本的scala,可以通过spark-sh ...

  7. java web 资源文件读取

    前提:假设web应用test(工程名) webapps下面有一资源文件test.html 规则:在获取资源时一般使用的是相对路径,以符号/开头,而 / 代表什么取决于这个地址给谁使用.服务器使用时,/ ...

  8. Java读写锁(ReentrantReadWriteLock)学习

    什么是读写锁 平时,我们常见的synchronized和Reentrantlock基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,哪怕是读操作.而读写锁是维护了一对锁(一个读锁和一个写锁), ...

  9. hdu 1114(完全背包)

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  10. CSS 绝对居中方案

    .Absolute-Center { margin: auto; position: absolute; top:;;;; }