作用域和构造器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作用域和构造器相关的知识,希望对你有一定的参考价值。

1. 作用域上部分承接course-32

2. 作用域注意事项 237

作用域和构造器_构造方法

2.1 例

public class Test33  

public static void main(String[] args)

T t1 = new T();
// 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。
// 局部变量,生命周期较短,伴随着它的代码块的执行而创建,
// 伴随着代码块的结束而销毁。即在一次方法调用过程中

t1.say();//当执行 say 方法时,say 方法的局部变量比如 name,会创建,当 say 执行完毕后
//name 局部变量就销毁,但是属性(全局变量)仍然可以使用

//全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)
//第 1 种跨类访问对象属性的方式
A a1 = new A();
a1.test();//jack

//第 2 种跨类访问对象属性的方式
a1.test2(t1);//jack 这里我把上面的t1传给了A类中的test2方法



class T

String name = "jack";

public void say()

String name = "king";
//细节 属性和局部变量可以重名,访问时遵循就近原则
System.out.println("say() name="+name);//king



class A

//全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)
public void test()

T t2 =new T();//声明T类
System.out.println(t2.name);//jack


public void test2(T t1)

System.out.println(t1.name);//jack

3. 构造方法/构造器 239

3.1 看一个需求

我们来看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如 果现在我要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名,该怎么做? 这时就可以使用构造器。

3.2 基本语法

[修饰符] 方法名(形参列表)

方法体;

3.2.1 说明:

1) 构造器的修饰符可以默认, 也可以是 public protected private

2) 构造器没有返回值

3) 方法名 和类名字必须一样

4) 参数列表 和 成员方法一样的规则

5) 构造器的调用, 由系统完成

3.3 基本介绍

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点:

1) 方法名和类名相同

2) 没有返回值

3) 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化。

3.4 构造器的快速入门 240

现在我们就用构造方法来完成刚才提出的问题:在创建人类的对象时,就直接指定这个对象的年龄和姓名

//现在我们就用构造方法来完成刚才提出的问题:在创建人类的对象时,就直接指定这个对象的年龄和姓名
public class Test33

public static void main(String[] args)

Person p1 = new Person("jack",80);
System.out.println("p1的信息如下");
System.out.println("p1对象的name="+p1.name);//jack
System.out.println("p1对象的age="+p1.age);//80



class Person

String name;
int age;
//构造器
//解读
//1. 构造器没有返回值, 也不能写 void
//2. 构造器的名称和类 Person 一样
//3. (String pName, int pAge) 是构造器形参列表,规则和成员方法一样
public Person(String pName,int pAge)

System.out.println("构造器被调用,完成对象的属性初始化");
name=pName;
age=pAge;

4. 构造器的注意事项

4.1 概览

作用域和构造器_System_02

4.2 一个类可以定义多个不同的构造器,即构造器的重载 241

比如:我们可以再给Person类定义一个构造器,用来创建对象的时候,只指定人名,不需要指定年龄

public class Test33  

public static void main(String[] args)

Person p1 = new Person("king",40);//第1个构造器
Person p2 = new Person("tom");//第2个构造器 只指定人名,不需要指定年龄


class Person

String name;
int age;//默认值0
//注:构造器本身也是一个方法
//第1个构造器
public Person(String pName,int pAge)

name=pName;
age=pAge;

//第2个构造器 只指定人名,不需要指定年龄
public Person(String pName)

name=pName;

4.3 如果程序员没有定义构造方法 系统会自动给类生成一个默认无参构造器(也叫默认构造器)可以使用 javap 指令 反编译看看 242

作用域和构造器_构造器_03

4.4 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器, 除非显式的定义一下 242

这句话是什么意思呢,意思是,我们开始没有定义构造器,但是在main中声明Dog dog1 = new Dog();代码编译是可以通过的(因为系统给我们了默认无参构造器),但是后面我们自己定义了一个构造器public Dog(String dName) ,此时的系统的默认无参构造器就被覆盖了,如果在跑代码,就会出错,因为main中声明Dog dog1 = new Dog();没有给参数,但是我们就是不想给参数,还想用无参构造器,那就要重新显式的定义一下无参构造器Dog() ,此时在编译代码就可以跑了

作用域和构造器_System_04

//如果程序员没有定义构造方法 系统会自动给类生成一个默认无参构造器(也叫默认构造器)  242
public class Test33

public static void main(String[] args)

Dog dog1 = new Dog();//使用的是默认的无参构造器



class Dog

//如果程序员没有定义构造方法 系统会自动给类生成一个默认无参构造器(也叫默认构造器)
//默认构造器 Dog()
//
//
//
//使用 javap 指令 反编译看看

// 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器, 除非显式的定义一下
public Dog(String dName)



//就不能再使用默认的无参构造器, 除非显式的定义一下
Dog() //显式的定义一下,无参构造器




js 作用域和作用域链

 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。

JavaScript作用域

  任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。

  1.  全局作用域(Global Scope)

  在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:

  (1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如:

1
2
3
4
5
6
7
8
9
10
11
12
var authorName="山边小溪";
function doSomething(){
    var blogName="梦想天空";
    function innerSay(){
        alert(blogName);
    }
    innerSay();
}
alert(authorName); //山边小溪
alert(blogName); //脚本错误
doSomething(); //梦想天空
innerSay() //脚本错误

  (2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:

1
2
3
4
5
6
7
8
function doSomething(){
    var authorName="山边小溪";
    blogName="梦想天空";
    alert(authorName);

(c)2006-2024 SYSTEM All Rights Reserved IT常识