Java面向对象
1:局部变量和成员变量
(1)在类中位置不同
成员变量:在类中方法外定义
局部变量:在方法中定义或方法参数中定义
(2)在内存中的位置不同
成员变量:在堆内存中
局部变量:在栈内存中
(3)生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的消失而消失
(4)初始化值不同
成员变量:有默认值
局部变量:没有默认值,必须定义、赋值后才能使用
2:形式参数
基本类型:形式参数的改变对实际参数没有影响
引用类型:形式参数的改变直接影响实际参数的值
当看到一个方法需要的参数是一个类时,就应该知道这里需要的是一个具体的实例对象
3:匿名对象
(1)匿名对象就是没有名字的对象 格式: new 类名();
(2)应用场景:
A:单独只调用一次方法的时候 : new 类名().方法();
B:可以当做实际对象参数 : StudentTest(new Student());
4:封装、封装的体现
(1)封装就是隐藏不需要对外开放的成员属性、方法,对外提供公共的访问方式
(2)封装的好处:
A:隐藏实现细节,提供公共访问方式
B:提高代码的复用性
C:提高代码的安全性
(3)设计原则 把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式 (4)private是封装的一种体现。 封装:类,方法,private修饰成员变量和成员方法
4.2:private关键字
(1)私有的意义,可以修饰成员变量和成员方法
(2)特点: 被private修饰的后的成员只能在本类中被访问
(3)private的应用: 以后再写一个类的时候: 把所有的成员变量给private了 提供对应的getXxx()/setXxx()方法
5:this关键字
(1)this关键字代表当前类的引用对象
个人理解: this.age == 类的对象名.age (访问的是成员变量)
(比如Student类,Student s = new Student(); this.age == s.age )
6:构造方法
(1)构造方法作用:用于对对象的数据初始化
(2) 构造方法 格式(特点): A:方法名和类名相同 B:没有返回值类型,连void都不能有 C:没有返回值
(3)构造方法注意事项:
A:如果我们没有写构造方法,系统会默认给我们提供一个无参的构造方法
B:如果我们给出了构造方法(有无参都算),系统将不再给出 无参构造方法
如果我们要使用无参构造方法,此时必须自己给出
建议:最好永远自己手动给出无参构造方法
(4)思考:构造方法中可不可以有return语句?
可以的,写成这样就行: return;
其次,我们在任何void类型的方法中都可以加return;,表示方法到这结束
7:给成员变量赋值
A:setXxx()
B: 带参构造方法
8:代码编写及测试:
A:学生类的案例
class Student{
private String name;
private int age;
public Student(){
}
public Student(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age= = age;
}
}
calss StudetnTest(){
public static void main(String[] args){
Stundet s1 = new Student();
s1.setName("王祖贤");
s1.setAge(21);
System.out.println(s1.getName+"-------"+s1.getAge());
Stundet s2 = new Student("小倩","18");
System.out.println(s2.getName()+"-------"+s2.getAge());
}
}
B:手机类的案例
class Phone{
private int jiage;
private String color;
public Phone(){}
public phone(int jiage,String color){
this.jage = jage;
this.color = color;
}
public int getJiage(){
return jiage;
}
public void setJiage(String jiage){
this.jiage = jiage;
}
public String getColor(){
reutrn color;
}
public void setColor(String color){
this.color = color;
}
}
class PhoneTest(){
public static void main(String[] args){
Phone p1 = new Phone();
p1.setJiage(2000);
p1.setColor("黑色");
System.out.println(p1.getJiage()+"----------"+p1.getColor());
Phone p2 = new Phone(1800,"红色");
System.out.println(p2.getJiage()+"----------"+p2.getColor());
}
}
C:长方形类的案例
class ChangFang{
private int chang;
private int width;
public ChangFang(){
}
public ChangFang(int chang,int width){
this.chang = chang;
this.width = width;
}
public int getChang(){
return chang;
}
public void setChang(int chang){
this.chang = chang;
}
public int getWidth(){
return width;
}
public void setWidth(int width){
this.width = width;
}
}
class ChangFangTest{
public static void main(String[] args){
ChangFang cf1 = new ChangFang();
cf1.setChang(38);
cf1.setWidth(18);
System.out.println(cf1.getChang()+"--------"+cf1.getWidth());
ChangFang cf2 = new ChangFang(47,32);
System.out.println(cf2.getChang()+"------"+cf2.getWidth());
}
}
9:一个类的成员变量初始化过程
Student s = new Student();
(1)把Student.class文件加载到内存
(2)在栈内存为s开辟空间
(3)在堆内存为学生对象申请空间
(4)给学生的成员变量进行默认初始化。null,0 (String name = "灵儿" int age = 27)
(5)给学生的成员变量进行显示初始化。灵儿,27 (String name = "灵儿" int age = 27)
(6)通过构造方法给成员变量进行初始化。逍遥,30 (Student s2 = new Student("逍遥",30);)
(7)对象构造完毕,把地址赋值给s变量
10:static关键字
(1)静态的意思。可以修饰成员变量和成员方法。
(2)静态的特点:
A:随着类加载而加载
B:优先对象而存在
C:被类的所有对象共享
这其实也是我们判断该不该使用静态的依据。 举例:饮水机和水杯的问题思考
D:可以通过类名调用 既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。
(3)静态的内存图 静态的内容在方法区的静态区
(4)静态的注意事项
A:在静态方法中没有this对象 B:静态只能访问静态(代码测试过)
因为它比对象先存在,所以先存在的成员不能访问没有存在的成员
比如: static int age; int age2 = 20; age = age2 (错误的)
因为它随着类的加载而加载,这时 age2还没有存在,所以 age = age2无法赋值
(5)静态变量和成员变量的区别
A:所属不同 静态变量:属于类,类变量 成员变量:属于对象,对象变量,实例变量
B:内存位置不同 静态变量:方法区的静态区 成员变量:堆内存
C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失 成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用 成员变量:只能通过对象名调用
11:main方法各种修饰符及参数的解释?
public: 访问权限最大
static: 不用创建对象调用
void: 返回值给jvm没有意义
main: 就是一个常见的名称。
String[] args: 可以接收数据,提供程序的灵活性 (数据类型保存的都是String类型)
格式:java MainDemo hello world java
上一篇: iPhone 6全光技术,拍照佳