1.1 引用传递
也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。
2.内部类和外部类可进行私有属性访问
class Outer{ //外部类
private String msg="hello";
class Inner{ //内部类
private int count=10;
public void m(){ //内部类调用外部类
msg="hello";
}
}
public void mm(){ //外部类调用内部类
new Inner().count=10;
}
}
public class Lianl {
public static void main(String[] args) {
}
}
3.代码块
class Person{
public Person(){
System.out.println("构造方法");
}
{
System.out.println("构造块");
}
static{
System.out.println("静态块"); //静态块只运行一次就停止
}
}
public class Lianx {
public static void main(String[] args) {
Person p=new Person(); //静态块==>构造快==>构造方法
Person p1=new Person(); //静态块==>构造快==>构造方法==>构造快==>构造方法
Person p2=new Person(); //静态块==>构造快==>构造方法==>构造快==>构造方法==>构造快==>构造方法
//System.out.println();
}
}
4.类是对象的模板,而对象是类的实例。对象是根据类的定义创建的。类是由属性和方法组成的,属性中定义类的具体信息(变量),方法是一些操作的行为。属性有些书中也称为成员。
class Person{
String name;
int tellNumber;
//由主方法调用的方法必须加上static,
//如果由对象调用的方法定义时不加static,如果不是由对象调用的方法才加上static
public String say(){
return "我的名字是:"+name+", 我的手机号是:"+tellNumber;
}
}
public class Dy {
public static void main(String[] args) {
}
}
5.封装性初步:声明并实例化对象:类名 对象名=new 类名();
分步完成语法:声明对象:类名 对象名=null;
实例化对象:对象名=new 类名();
对象.属性:表示调用类中的属性。
对象.方法():表示调用类中的方法。
package oracle.ly.com;
class Person{
String name;
int age;
public String say(){
return "姓名:"+name+", 年龄:"+age;
}
}
public class Dy {
public static void main(String[] args) {
Person per=null;
per=new Person();
//Person per=new Person(); //实例化
per.name="Allen"; //通过对象调用属性
per.age=22; //通过对象调用属性
String str=per.say(); //通过对象调用方法
System.out.println(str);
/**
* 分析以上代码:
* 先给出内存空间的两块区域:堆内存和栈内存
* 堆内存:保存对象的真正数据,都是每一个对象的属性内容,需要使用new关键字开辟。
* 栈内存:保存的是一块堆内存的空间地址。
* 注意:堆内存开辟一块空间(对象实例化),只要在堆内存开辟一块空间,必须用new关键字。
* 经典异常:java.lang.NullPointetException 抛NPE(空指针、空指向)
*
*/
}
}
6. 没有栈内存指向的堆内存对象称之为垃圾。GC垃圾回收器,会不定期的清理垃圾。
class Person{
String name;
int age;
public String say(){
return "姓名:"+name+", 年龄:"+age;
}
}
public class Dy {
public static void main(String[] args) {
Person per=null;
per=new Person();
//Person per=new Person();
per.name="Allen";
per.age=22;
Person per2=new Person();
per2.name="Smith";
per2.age=21;
per2=per; //地址改变了
System.out.println(per.say());
System.out.println(per2.say());
}
}
7.封装(简单的封装)
class Person{ private String name; //私有的 private int age; //私有的 public void setName(String n){ name=n; } public void setAge(int a){ age=a; } public String say(){ return "姓名:"+name+", 年龄:"+age; } } public class Dy { public static void main(String[] args) { Person p=new Person(); p.setName("Allen"); p.setAge(22); System.out.println(p.say()); } }
在java开发中,属性设置为private,要想访问私有属性,必须声明seter、getter方法。
以name属性为例,setter方法:setName(); getter方法:getName()
还有getlnfo()方法,返回所有变量的值。