Java学习笔记(04)java
若有不对或不足的地方,请给出建议,谢谢!编程
面向对象的核心:找合适的对象作合适的事情jvm
面向对象的编程思想:尽量的用计算机语言来描述现实生活中的事物函数
面向对象:侧重于对象学习
类是对同一类事物(对象)的抽象,对象是实际存在的该类的各类实体this
建立的对象内存分析:spa
建立的对象存在栈区,开辟的内存空间存在于堆区,在堆区保存值code
位置:对象
1.成员变量是在类中方法外。blog
2.局部变量存在方法中
做用域:
1. 成员变量当前类中均可以使用
2.局部变量只能在方法中使用
初始化:
1.成员变量默认有初始值
2.局部变量要想使用必须初始化。
生命周期:
1.成员变量随着对象的建立而建立,随着对象的消失而消失
2.局部变量出来方法的调用就消失
2.java中如何来找到对象
1.本身定义好的类,必须知道这个类。
//属性 : 变量类型 变量名 = 值; String name; int age; String sex;
2.自定义类,经过这个类来建立出对象。
3.类的格式 :
class 类名 {
语法:数据类型 成员变量名
方法:描述对象的公共行为。
语法: 普通方法:修饰符 返回值类型 方法名() {}
//方法 // 修饰符 返回值类型 方法名(参数列表){} public void cry(){ System.out.println(name+"哭了"); }
构造方法:修饰符 方法名() {} 在构造方法中,方法名和类名相同,无返回值类型
静态方法:static 修饰符 返回值类型 方法名() {}
1 //静态方法名的建立:修饰符 static 返回值类型 方法名() {} 2 public static void haha() { 3 Demo de1 = new Demo(); 4 System.out.println(de1.name1 +"代码改变世界"); //报错 5 System.out.println(Demo.name2 +"代码改变世界"); 6 de1.xixi(); 7 } 8 /* 9 一、静态方法中可直接调用静态变量,而不能直接调用普通变量;要想调用普通变量,建立对象来调用。 并且在Java中,容许静态方法中的对象名和主方法中的对象名相同 10 11 二、在普通方法中能够直接调用静态变量和普通变量,可是,在主方法不能直接用类名调用方法,而是经过建立对象 12 13 三、静态方法和普通方法的相互调用,都须要建立对象来完成。并且不能本身调用本身,不然形成死循环 14 */
类名对象名 = new 类名();
Class Demo { Public static void main(String[] args) { Demo demo = new Demo(); System.out.println("HelloWorld"); } }
前提:必须有一个对象
语法:对象.属性名 = 值;
访问属性:对象.属性名
访问方法:对象.方法名();
没有名字的对象,不建议使用
class Person { String name; //名字 int age; // 年龄 } } class Demo3 { public static void main(String[] args) { new Person().name = "小红"; new Person().age = 10; System.out.println(new Person().name);// null } }
1.咱们通常不会用匿名对象给属性赋值,没法获取属性值。
2.匿名对象永远都不多是一个对象。
1.若是一个对象须要调用一个方法一次的时候,就能够用匿名对象来调用。
2.能够做为实际参数在方法中调用。
在java中相似OC中的初始化方法叫构造方法
1.能够在对象建立时初始化属性值。
2.初始化方法只能被调用一次。
//公有属性 String name; int age; //建立构造方法 public Person(String n,int a){ //给属性赋值 name = n; age = a; }
给对应的对象进行初始化,对象建立时初始化属性值。
建立构造方法: 修饰符 类名(参数列表){}
1.方法名和类名保持一致
2.构造方法没有返回值的。
3.构造方法不是由咱们手动调用的,而是在对象被 建立时由java虚拟机调用
4.若是一个类咱们没有给他定义构造方法,jvm在编 译的时候会给这个类默认
添加一个无参的构造方法。
5.若是你本身定义构造方法,jvm就不会在建立无参 的构造方法。这个时候须要
本身定义一个无参的构造方法
//创键构造方法 Baby(String n,String s,int a){ // 局部变量 :必须初始化 //给属性赋值 name = n; sex = s; age = a; } //参数的个数不同。 Baby(String n,String s){ name = n; sex = s; } //和第一个对比参数的顺序不同 Baby(String s,int a,String n){ name = n; sex = s; age = a; }
在java中定义的方法是能够重名的,这种重名的方法也叫方法的重载。
1 //创键构造方法 2 Baby(String n,String s,int a){ // 局部变量 :必须初始化 3 4 //给属性赋值 5 name = n; 6 sex = s; 7 age = a; 8 } 9 //参数的个数不同。 10 Baby(String n,String s){ 11 name = n; 12 sex = s; 13 } 14 //和第一个对比参数的顺序不同 15 Baby(String s,int a,String n){ 16 name = n; 17 sex = s; 18 age = a; 19 }
1.必须是方法名同样,才能够叫方法重载
2.任何方法均可以实现方法的重载,包括构造方法、普通方法、静态方法
3.必需要保证参数列表的参数的顺序或者个数不同
构造方法中是能够调用普通方法的
在同一个类中,方法的调用直接拿到方法名调用就能够了,而在不一样类中调用就会报错
1 //普通代码块 2 { 3 name2 = "正在学习"; 4 } 5 //静态代码块 6 static { 7 name3 = "在慕课网学习"; 8 } 9 //静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量
做用:给对象统一初始化的值
位置:写在成员变量的位置上
1.java中编译器编译一个java源文件的时候,会把成员变量的声明放在类的最前面。即便你是把它定义在类的最后面,运行的时候系统也会在类的最前面给它进行声明
**2.在有构造方法的前提下:成员变量的初始化都是在构造方法中执行的。
3.一旦通过java编译器编译后,那么构造代码块中的代码会移到构造函数中执行,并且会先于构造函数的代码块执行
4.成员变量的显示初始化和构造代码块,按照当前代码的顺序来执行的,谁在后面就显示谁。
this : 表明所属方法 / 局部变量的调用对象,用来访问这个类的属性和方法。 和OC 中的self很象
*对象的引用变量(对象名)存在栈区,对象是存在于堆区,成员变量也随着对象存在堆区中
内存分析:
this关键字的做用 :
// this在成员变量中的使用 public Person (String name , int age){ this.name = name; // 若是不适用this,两个name都是指的时局部变量的name,Java中的就近原则 this.age =age;
this关键字的使用注意点:
1.存在与成员变量同名的局部变量时:方法内部会访问局部变量(不然java采用就近原则)
2.在方法中不存在和成员变量同名的局部变量时:java编译器在编译时会默认给变量前面加一个this.
3.经过this实现构造方法中调用构造方法
构造方法中也能够调用普通(实例)方法
语法: this(参数);
构造方法 / 函数何时调用:建立对象的时候有jvm(Java虚拟机)调用
//直接用方法名来调用方法 调用的是普通方法。,不能将这个方法作为构造方法。 //Student(name,id,classNum,sex); //错误 //这个的原理和上面的同样,若是没有this,系统会自动添加this调用的 //this.Student(name,id,classNum,sex); 错误的。 //正确的构造方法中调用构造方法 this(name,id,classNum,sex); // 必须是第一个语句 this.age = age;
2.调用构造方法的注意点: