作用域和构造器
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 概览
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
4.4 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器, 除非显式的定义一下 242
这句话是什么意思呢,意思是,我们开始没有定义构造器,但是在main中声明Dog dog1 = new Dog();代码编译是可以通过的(因为系统给我们了默认无参构造器),但是后面我们自己定义了一个构造器public Dog(String dName) ,此时的系统的默认无参构造器就被覆盖了,如果在跑代码,就会出错,因为main中声明Dog dog1 = new Dog();没有给参数,但是我们就是不想给参数,还想用无参构造器,那就要重新显式的定义一下无参构造器Dog() ,此时在编译代码就可以跑了
//如果程序员没有定义构造方法 系统会自动给类生成一个默认无参构造器(也叫默认构造器) 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); 将人名大写(占 ' 和 - )
|