构造函数:
构造函数的作用:给对应的对象进行初始化。
构造函数定义的格式:
修饰符 函数名(形式参数){
函数体...
}
构造函数要注意的细节:
java编译器为我们添加的构造方法的权限修饰符与类的权限修饰符一致/
jdk提供了一个开发工具(javap.exe)给我们进行反编译。
javap反编译工具的使用格式:
javap -c(反编译代码) -l(打印行号和本地变量表) -private (显示类和所有成员) 类名
构造函数与普通函数的区别:
构造代码块:给对象进行统一的初始化。
构造代码块的格式:
{
构造代码块;
}
注意:构造代码块的大括号必须位于成员位置上。
代码块的类别:
构造代码块要注意的事项:
如果存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java采取的是就近原则的机制访问的。)
1 public class Creative { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 Animal a=new Animal(); 6 a.eat(); 7 } 8 9 } 10 class Animal{ 11 String name="狗"; 12 String color; 13 public void eat() { 14 String name="鸡"; 15 System.out.println(name+"在吃."); 16 } 17 }
比如这里就是鸡在吃而不是狗在吃。
ps:栈内存又叫方法栈,一个方法要运行的时候,jvm会在栈内存中开辟一片属于这个方法的空间,让这个方法在这片空间执行
this关键字:this关键字代表了所属函数的调用者对象
this关键字的作用:
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关键字调用其他构造函数要注意的事项:
方法区(数据共享区):数据共享
static修饰的成员变量(静态成员变量) 只会在数据共享区中维护一份,而非静态成员变量的数据会在每个对象中都维护一份的。 但是某个修改这个静态变量,就会影响所有的对象的属性
static (静态\修饰符)
静态成员变量的访问方式:
注意:
static修饰成员变量的应用场景: 如果一个数据需要被所有对象共享使用的时候,这时候即可使用static修饰
class Emp{ static int count=0; { 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(); } }
原文:https://www.cnblogs.com/zhangwugai/p/10311893.html