Java面向对象核心:类与对象
- 类是对某一类事物的共性的抽象概念;而对象描述的是一个具体的产物。(类是一个模板,而对象才是类可以使用的实例,先有类才有对象)
- 类是我们Java程序中最小的执行单元;面向对象思想开发(方法).
- python:函数 ;面向对象+函数式编程
1.类使用class关键字修饰;类名使用首字母大写的写法;一个源文件不能代表一个类,原因是一个源文件中可以存放多个类
2.对象通过new关键字创建的 :类名 对象名=new 类名();
3.类中的成员变量具有什么特点,和我们之前在main方法中声明变量有什么不同?
- 成员变量是具备默认值的
- 访问修饰符修饰 static private public
4.类对象的实例化: new关键字
- clone克隆
- 反射的:newInstance()
- 代理: Proxy.newInstance()
5.对象数组:就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组就行了。
Java中的四种访问级别:修饰符
- public:公共 范围是最广的 使用public关键字修饰的任何成员都可以进行调用
- private:私有的 范围是最窄的 使用private修饰的成员只能在本身类中进行调用
- default:默认不编写访问修饰符的权限 在同级包中的其他类可以使用 不能跨包使用
- protected:同包及子类可以访问(受保护的)
成员变量:修饰实体的静态特征,成员变量拥有默认值
- 数值类型的变量:0
- Boolean:false
- String:null
- 数组:null
成员方法: 访问修饰符 返回值类型 方法名(参数){方法体} 声明*
什么是方法的返回值类型:函数执行结束后的结果类型 void 代表为空返回值
- return
- 返回值
- 结束方法的运行(return后不能编写任何代码)
什么是参数:方法执行的必备条件,参数的个数没有限制
调用阶段:通过对象调用函数 对象名.函数名
this关键字:当前类对象
1.当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。(this是当前对象自己)
2.把自己当作参数传递时,也可以用this.(this作当前参数进行传递)
static关键字: 是我们main函数的一种修饰符( 静态修饰符:标识成员可以被类直接调用)
- 静态成员变量
- 静态成员方法
- 静态代码块
- 静态导包
package cn.biji; public class StatinTest { static int number=10;//静态成员变量 public static void main(String[] args) { } public static void sayHello(String name){//静态函数 System.out.println(name+"您好"); } static{ System.out.println("这是静态代码....");//静态代码块 } static class innerClass{//静态内部类 } }
static:可以被类名直接调用
- 类名.属性名
- 类名.方法名
static与非static之间的重要区别:
区别1:
static修饰的成员是随着类的加载而加载(优先)
非static成员是随着对象的创建而加载
区别2:
静态方法|静态代码块只能调用静态成员,非静态成员是不能直接调用的,创建对象(不能使用this关键字)
非静态方法可以直接调用非静态成员,也可以调用静态成员.类的对象进行调用静态成员
区别3:
静态成员对于多个对象而言是共享的
非静态成员对于多个对象是彼此独立的
封装:把类的公有属性定义在内部的过程被称之为封装
可以封装变量和方法
为了保证字段的隐私性: 我们选择使用private修饰符修饰变量
声明对应的get/set方法对变量的读写操作提供支持(MyEclipse中生成get set的快捷键 alt+shift+s 点击R键 选择对应的字段 生成get/set)
public static void main(String[] args) { Person p=new Person(); Person p1=new Person(); p.setName("张三"); p.setAge(16); System.out.println("我叫:"+p.getName()+",今年:"+p.getAge()); System.out.println("我叫:"+p1.getName()+",今年:"+p1.getAge()); }
package cn.bdqn; public class Person { private String name="无名氏"; private int age=18; 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; }
不定长参数:方法:参数 不定长参数(0~N)(语法:类型...参数名 )
不定长参数的要求:必须写在参数列表的末尾
递归函数:在一定程度上可以为循环
- 自己调用自己本身的方法被称为递归函数
- 最重要的就是递归何时结束
import java.util.Scanner; public class ZuoYe01 { /** * @param args */ public static void main(String[] args) { System.out.println("请输入项数"); Scanner inScanner=new Scanner(System.in); int n=inScanner.nextInt(); System.out.println(f(n)); } public static int f(int n){ if (n == 1 || n == 2) { return 1; } else { return f(n-1)+f(n-2); } } }
方法重载:保证同名方法的参数不同: 个数 类型 顺序
和访问修饰符 返回值类型无关