引用之间传递 this 关键字 封装
引用之间的传递
简单数据类型之间传递的是值
引用数据类型之间传递的是地址
案例:
public class Demo {
public static void main ( String [ ] args) {
Student s1 = new Student ( ) ;
s1. age = 10 ;
Student s2 = new Student ( ) ;
s2 = s1;
s2. age++ ;
System . out. println ( s1. age) ;
}
}
class Student {
String name;
int age;
}
this关键字
this.
this : 这个的意思 只的是当前对象 谁调用我 我就代表谁
作用:用于解决成员变量和局部变量重名问题
案例1 :
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( ) ;
s. speakAge ( ) ;
}
}
class Student {
String name;
int age = 20 ;
public void speakAge ( ) {
int age = 18 ;
System . out. println ( this . age) ;
}
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == =
案例2 :解决构造方法为对象赋值时 解决参数名和成员变量名 重名问题导致的赋值失败
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 56 ) ;
System . out. println ( s. name) ;
System . out. println ( s. age) ;
}
}
class Student {
String name;
int age;
public Student ( String name, int age) {
this . name = name;
this . age = age;
}
}
this()
this(参数)
作用:用于在构造方法中调用其他的构造方法
案例1 :
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 17 ) ;
}
}
class Student {
String name;
int age;
public Student ( ) {
System . out. println ( "无参被调用" ) ;
}
public Student ( String name) {
this ( ) ;
System . out. println ( "一个参数构造被调用" ) ;
this . name = name;
}
public Student ( String name, int age) {
this ( ) ;
System . out. println ( "两个参数的构造被调用" ) ;
this . name = name;
this . age = age;
}
}
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
案例2 :
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 17 ) ;
System . out. println ( s. name) ;
System . out. println ( s. age) ;
}
}
class Student {
String name;
int age;
public Student ( ) {
System . out. println ( "无参被调用" ) ;
System . out. println ( "1000行代码被执行" ) ;
}
public Student ( String name) {
this ( ) ;
this . name = name;
System . out. println ( "一个参数构造被调用" ) ;
}
public Student ( String name, int age) {
this ( name) ;
this . age = age;
System . out. println ( "两个参数的构造被调用" ) ;
}
}
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
案例3 :注意构造方法之间不可以递归调用
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 17 ) ;
System . out. println ( s. name) ;
System . out. println ( s. age) ;
}
}
class Student {
String name;
int age;
public Student ( String name) {
this ( name, 23 ) ;
this . name = name;
System . out. println ( "一个参数构造被调用" ) ;
}
public Student ( String name, int age) {
this ( name) ;
this . age = age;
System . out. println ( "两个参数的构造被调用" ) ;
}
}
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 17 ) ;
System . out. println ( s. name) ;
System . out. println ( s. age) ;
}
}
class Student {
String name;
int age;
public Student ( String name, int age) {
this ( name, age) ;
System . out. println ( "两个参数的构造被调用" ) ;
}
}
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
案例4 :this ()和this (参数)必须放在构造方法的第一行语句
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 17 ) ;
System . out. println ( s. name) ;
System . out. println ( s. age) ;
}
}
class Student {
String name;
int age;
public Student ( ) {
System . out. println ( "无参被调用" ) ;
System . out. println ( "1000行代码被执行" ) ;
}
public Student ( String name) {
this ( ) ;
this . name = name;
System . out. println ( "一个参数构造被调用" ) ;
}
public Student ( String name, int age) {
System . out. println ( "两个参数的构造被调用开始" ) ;
this ( name) ;
this . age = age;
System . out. println ( "两个参数的构造被调用结束" ) ;
}
}
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == =
案例5 :一个构造方法中只能有一个this ()或者this (参数)语句
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 17 ) ;
System . out. println ( s. name) ;
System . out. println ( s. age) ;
}
}
class Student {
String name;
int age;
public Student ( ) {
System . out. println ( "无参被调用" ) ;
System . out. println ( "1000行代码被执行" ) ;
}
public Student ( String name) {
this ( ) ;
this . name = name;
System . out. println ( "一个参数构造被调用" ) ;
}
public Student ( String name, int age) {
this ( name) ;
this ( ) ;
System . out. println ( "两个参数的构造被调用开始" ) ;
this . age = age;
System . out. println ( "两个参数的构造被调用结束" ) ;
}
}
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
案例6 : this ()和this (参数)只能定义在构造方法中
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( "桑邦好爽" , 78 ) ;
s. m2 ( ) ;
}
}
class Student {
String name ;
int age;
public Student ( ) {
System . out. println ( "10000行代码" ) ;
System . out. println ( "无参构造" ) ;
}
public Student ( String name) {
this . name = name;
System . out. println ( "一个参数的构造" ) ;
}
public Student ( String name , int age) {
this ( name) ;
this . age = age;
System . out. println ( "两个参数的构造" ) ;
}
public void m2 ( ) {
this ( ) ;
}
}
封装
private : 私有的 被private 修饰的属性只能在本类访问
封装的步骤:
1. 私有属性 就是将属性用private 修饰
2. 对外提供公开的get() 和 set() 方法
关于set和get方法的规范
方法名:set属性名 get属性名 例如 setAge(数据类型 参数名) getAge ( )
参数名和属性名一致
eg: 标准的写法 小心挨打
public void setAge(int age){
this . age = age;
}
public int getAge(){
return this . age;
}
案例:
public class Demo {
public static void main ( String [ ] args) {
Student s = new Student ( ) ;
s. setAge ( 50 ) ;
System . out. println ( s. getAge ( ) ) ;
}
}
class Student {
private String name;
private int age;
public void setAge ( int age) {
if ( age< 0 || age> 120 ) {
System . out. println ( "非法数据 赋值失败" ) ;
} else {
this . age = age;
}
}
public int getAge ( ) {
if ( age> 30 ) {
System . out. println ( "这是我虚假的年龄" ) ;
return 18 ;
} else {
System . out. println ( "这是我真实的年龄" ) ;
return this . age;
}
}
}