Java初学—类与对象

一、类和对象的定义和创建

  1.什么是类:

    类是Java最小的执行单元,不占内存空间,一个源文件不能看作是一个类,可能包含多个类,但是有且只有一个main主方法作为程序的入口。所有Java程序都以类class为组织单元 关键字class定义自定义的数据类型。

  2.什么是对象:

    对象是有具体的特征和方法,是类的具体化。

  3.类和对象的区别

    具有相同属性和方法的一组对象的集合 类是对象的抽象,对象是类的具体。 

  4.类与对象的命名

    类与对象的命名与命名规范一致,类通常首字母大写, 对象用驼峰命名规则

   5.类和对象的创建

    类的创建很简单:class 类名{};

    创建对象 类名 对象名 = new 类名(); 引用对象成员:使用“.”进行以下操作 引用类的属性:对象名.属性 引用类的方法:对象名.方法名();

二、成员变量的创建

  1.成员变量和成员方法

   在类中创建的属性叫做成员变量,成员变量和main方法中的变量的区别是成员变量有默认值,例如: 数值类型的变量:0;boolean:false; String:null;数组:null; 

   在类创建的方法叫做成员方法是用来完成某个特定的功能;成员方法的创建有返回值和无返回值的和有参数与无参数;有无返回值和有无参数没有联系,互不影响 。

    

public class Ren {
    //创建成员变量 运用在有返回值的成员方法
    String nameString;
    int age;
    //创建成员变量 运用在无返回值的成员方法
    String like;
    String love;
    //创建成员变量 运用在有参数的成员方法
    String dizhi;
    //创建有返回值的成员方法
    public String showinfo(){
        //string是要返回的数值类型  作用是在main方法调用后  返回一个字符串的info值
        String info="我叫"+nameString+"今年"+age;
        return info;//return的作用是结束当前方法 然后将info传出
     }
    //创建无返回值的成员方法
    public void showlike() {
        //void 的作用是告诉系统这个方法是无返回值的 调用方法时只运行一次方法内的语句 不会给任何值
        System.out.println("喜欢"+like+"爱好"+love);
    }
    //创建有参数的方法
    public void showaddzes(String dizi){//括号内被称为形参  在main中传的参数叫做实参  实参的个数和 数据类型应该和实参一样
        this.dizhi=dizhi;//this代表当前成员变量 给他赋值的是获取的控制台输出的值
        System.out.println("住在"+dizhi);
    }
}
public class rentext {

    public static void main(String[] args) {
        //通过调用方法实现将从控制台的数据传到自定义的Ren的类中并通过里面的方法实现功能
        Ren r=new Ren();//实例化r
        Scanner in=new Scanner(System.in);
        System.out.println("输入姓名");
        r.nameString=in.next();//调用Ren类中的属性并赋值
        System.out.println("输入年龄");
        r.age=in.nextInt();
        System.out.println("喜欢什么");
        r.like=in.next();
        System.out.println("爱好什么");
        r.love=in.next();
        r.showinfo();//调用无参数 有返回值方法
        r.showlike();//调用无参数 无返回值方法
        r.showaddzes("内蒙古");//此方法为有参数方法 需要按照形参给出相应数据类型的实参
        

    }

}

  2.有无参数和有无返回值的方法选择

    没有最好的代码。只有最合适的代码。根据实际的需求来选择建立的

  3.基本数据类型和引用数据类型传参的区别

    基本数据类型是传的值,复制一份给参数方法 在main方法中的值不变。

    引用数据类型是传的地址,修改的是main方法中的数据;

 三、java访问修饰符

  1.public

    公共的范围是最广的,该修饰符修饰的无论是在类的内部或者外部都能够被调用

  2.private

    私有的范围是最小的,该修饰符修饰的成员只能在本身使用

  3.protected

    在本包同类,和子类中使用

  4.default

    默认可以不编写访问修饰符,本类同级包中可以调用不能挎包使用

 四、对象数组的运用

  1. 对象数组:

    所谓的对象数组就是一组相关对象的集合,要注意的是,数组一定要先开辟空间,但是因为其是引用数据类型,所以数组里面的每一个对象都是null值,则在使用的时候数组中的每一个对象必须分别进行实例化操作.

  2. 对象数组的声明:

    类名称   对象数组名[]   =    new  类名称[数组长度];

    数组本身是属于引用数据类型的:而类本身也是属于引用数据类型的,所以此时不管是引用还是基本数据类型,都可以使用数组的格式进行声明并使用。

      数组格式:数据类型    数组名称[]  =  new  数据类型[数据长度];

 1 public class Student
 2 {
 3     // 成员变量
 4     private String name;
 5     private int age;
 6 
 7     // 构造方法
 8     public Student()
 9     {
10         super();
11     }
12 
13     public Student(String name, int age) 
14     {
15         super();
16         this.name = name;
17         this.age = age;
18     }
19 
20     // 成员方法
21     // getXxx()/setXxx()
22     public String getName() 
23     {
24         return name;
25     }
26 
27     public void setName(String name) 
28     {
29         this.name = name;
30     }
31 
32     public int getAge() 
33     {
34         return age;
35     }
36 
37     public void setAge(int age) 
38     {
39         this.age = age;
40     }
41 
42     @Override
43     public String toString() 
44     {
45         return "Student [name=" + name + ", age=" + age + "]";
46     }
47 }
 1 /**
 2 把5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。
 3 *         学生:Student
 4 *         成员变量:name,age
 5 *         构造方法:无参,带参
 6 *         成员方法:getXxx()/setXxx()
 7 * 分析:
 8 *         A:创建学生类。
 9 *         B:创建学生数组(对象数组)。
10 *         C:创建5个学生对象,并赋值。
11 *         D:把C步骤的元素,放到数组中。
12 *         E:遍历学生数组。
13 *  */
14 
15 public class Practice 
16 {
17     public static void main(String[] args)
18     {
19         // 创建学生数组(对象数组)。
20         Student[] students = new Student[5];
21         // for (int x = 0; x < students.length; x++) 
22         // {
23         //         System.out.println(students[x]);
24         // }
25         //     System.out.println("---------------------");
26 
27         // 创建5个学生对象,并赋值。
28         Student s1 = new Student("小明", 27);
29         Student s2 = new Student("小红", 30);
30         Student s3 = new Student("小强", 30);
31         Student s4 = new Student("旺财", 12);
32         Student s5 = new Student("张三", 35);
33 
34         // 将对象放到数组中。
35         students[0] = s1;
36         students[1] = s2;
37         students[2] = s3;
38         students[3] = s4;
39         students[4] = s5;
40 
41         // 遍历
42         for (int x = 0; x < students.length; x++) 
43         {
44             //System.out.println(students[x]);
45             Student s = students[x];
46             System.out.println(s.getName()+"---"+s.getAge());
47         }
48     }
49 }

五、构造方法和重载

  1无参构造方法,

    每个类都有个默认无参构造方法所以在main方法里声明对象会有(类名 对象名=new 类名(); )

  2.带参构造方法

    带参构造方法可以在类中声明无返回值的与类同名的方法如:

package gouzaofangfa;

public class Stud {
    //创建成员变量
    String name;
    int age;
    //无参构造方法相当于 在main方法中的 Stud s=new Stud(); 无实际意义,但是一旦有了有参数构造方法就必须写上这一无参构造,否则系统不再给提供无参方法。
    public Stud(){}
    //有参构造方法  
    public Stud(String name,int age){
        this.name=name;
        this.age=age;
    }
    
}
package gouzaofangfa;

public class Studtest {
public static void main(String[] args) {
    //这是无参构造方法需要在main实例化
    Stud stud=new Stud();
    stud.name="张三";
    stud.age=16;
    //有参构造方法
    Stud stud2=new Stud("王五",12);
}
}

  3.方法重载

    定义:一个类中允许出现同名但不同参数的方法,这种方法叫做方法重载。不同体现在参数的个数,顺序,类型。和访问修饰符,返回值无关。此定义适用于任何方法。

六、Static修饰符

    static修饰符不同于访问修饰符,他是用来声明静态的,static可以修饰类,成员变量,成员方法,代码块,静态导包。

    成员变量 静态变量:可以直接通过类名访问 成员方法

    静态方法:可以直接通过类名访问 代码块

    静态代码块:当Java虚拟机加载类时,就会执行该代码块

  1.静态类变量  静态成员变量

    被声明的类和变量可以直接使用,如图:  

   

    类变量(静态变量):被static修饰的变量 在内存中只有一个拷贝 类内部,可在任何方法内直接访问静态变量 其他类中,可以直接通过类名访问

    实例变量 :没有被static修饰的变量 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。

  static变量的作用:

    (1)能被类的所有实例共享,可作为实例之间进行交流的共享数据

    (2)如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间

   2.静态方法和成员方法

    静态方法:可直接通过类名访问 静态方法中不能使用this和super 不能直接访问所属类的实例变量和实例方法 可直接访问类的静态变量和静态方法,静态方法必须被实现

    成员方法:通过实例访问 可直接访问所属类的静态变量、静态方法、实例变量和实例方法 

  3.static与非static的区别    

  区别1:
     static修饰的成员是随着类的加载而加载(优先)
     非static成员是随着对象的创建而加载
   区别2:
     静态方法|静态代码块只能调用静态成员,非静态成员是不能直接调用的,创建对象(不能使用this关键字)
     非静态方法可以直接调用非静态成员,也可以调用静态成员.类的对象进行调用静态成员
   区别3:
     静态成员对于多个对象而言是共享的
     非静态成员对于多个对象是彼此独立的

七、递归算法

  1.什么是递归算法

     递归函数:在一定程度上可以为循环自己调用自己本身的方法被称为递归函数最重要的就是递归何时结束!

   2.为什么要用递归算法

    优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。

    缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

  3.怎么用递归算法

     裴波那契数列的定义:他的第一项和第二项均为1,以后各项都为前两项的和。如1,1,2,3,5,8,13,21,34,55,~~~~

int Fbo(int i) //求第n项
{
    if(i < 2)
        return i == 0 ? 0 : 1;//满足时输出的第一位 和第二位
    return Fbo(i - 1) + Fbi(i - 2); //该数的之前一位 和前两位相加等于第三位
}

    运算过程图解

  

原文地址:https://www.cnblogs.com/wuxuewei/p/10944964.html