- 前言
- 一、类和对象
- 1.类
- 2.对象
- 二、static
- 1.static属性:静态属性
- 2.static方法:类方法/静态方法(工具方法)
- 3.static代码块:静态代码块
- 4.static类:静态内部类
- 三、面向对象三大特征:封装、继承、多态
- 四、构造方法
- 五、this关键字
- 1.this修饰属性,表示 直接从本类中寻找属性
- 2.this修饰方法,表示调用本类方法
- 3.this表示当前对象引用
- 六、代码块
- 普通代码块:定义在方法中,使用{}括起来的代码块
- 构造代码块:定义在类中,不加任何修饰符,直接使用{}定义的代码块
- 静态代码块:定义在类中,使用static修饰的代码块
- 同步代码块:多线程部分详解
- 补充
- 1.toString()
- 2.匿名对象:一个对象没有任何引用指向
前言
类和对象:存在即合理
编程思想:如何把现实生活问题抽象成代码实现
面向对象编程(更符合人类思考问题的方式):Java语言一切皆对象,所有的 *** 作行为被封装在一个个的对象中。
面向过程编程:C语言全是函数调用,一个函数就代表一个过程。
一、类和对象
类:模板,规定了该类所具备的属性和行为
对象:类的一个实例
比如:
人类:类
普京:对象
类描述了所有对象都具备的一些属性和行为
具体的属性值和能表现出来的行为是由具体的对象来表现
不同对象之间千差万别,主要是属性值不同
//类的定义 class 类名称{ 属性 行为/方法 其他类/接口 }
1.类名称使用大驼峰命名法
从第一个单词开始首字母大写,多个单词都是首字母大写
2.一个源文件*.java必须与该文件中的主类同名(public class),源文件中主类有且只有一个(一般:主方法main存在于主类中,可以没有)
3.一个源文件可以存在N个普通类(直接使用class声明的类,不加public)
根据Person类产生他的对象
一个类可以产生N个对象
Person per = new Person();
如何根据对象来调用属性和方法?
**.**访问修饰符:所有引用数据类型访问堆上空间,使用“.” *** 作符
per.name="zhang"; per.show();二、static 1.static属性:静态属性
表示类属性,该类的所有对象共享该属性,直接通过类名称访问
static修饰的属性保存在JVM方法区,有且只有一个,只和类相关(可以直接China.country,不产生对象就访问,China引用为NULL时,仍然可以访问类的静态变量-类属性)
类中常量:static final 此时常量全局唯一且不能修改,所有对象共享此常量
直接通过类名称调用
Arrays.sort(); Arrays.copyOf();
若main中调用静态方法(static修饰的方法),直接使用方法名
思考:
静态方法能否访问类中成员变量?
答:不能,因为成员变量必须有对象,静态方法不需要对象就可以调用
静态方法能否访问类中静态变量?
答:能。(static家族之间可以相互调用-都不要对象)
成员方法能否访问静态变量?
答:能。
成员方法能否访问成员变量?
答:能。一个家族的。
静态代码块:定义在类中,使用static修饰的代码块
当类加载时执行一次,与对象产生无关。
类加载:就是把需要使用的类加载到JVM中
static class-没对象也能用
三、面向对象三大特征:封装、继承、多态面向对象三大特征:封装、继承、多态
访问权限分为两种:
private:实现属性封装。
1.当一个属性被private修饰,该属性只能在类的内部可见,出了该类无法使用(即使是继承类也不行),此时调用者无法直接使用。
2.类外部 *** 作(取得/修改)private属性,需要使用类提供getter/setter,根据情况决定。
3.private可以修饰内部类不能修饰外部类(因为类就是为了产生对象,若在外部修饰无法使用)
public:公共的,无论如何都能用
四、构造方法构造方法:是类的特殊方法,构造方法是执行对象的初始化 *** 作
语法:构造方法没有返回值声明,方法名称与类名称相同
访问修饰符(public private)类名称(){}
class Person{ private String name; private int age; public Person(){ System.out.println("hello"); } }
a.当类中没有显示声明构造方法时,JVM会生成一个默认的无参构造。当在类中显示提供了构造方法(编写构造方法),JVM将不再生成默认的无参构造
class Person{ private String name; private int age; public Person(String n){ name=n; } }
b.什么是初始化?作用:给类中成员变量赋初值
c.构造方法的重载:这些重载的构造方法,只是参数的个数不同(因为构造方法就是给类中属性赋值,类中属性的类型再定义时就规定好了)
一般按照构造方法参数个数升序排列
d.构造方法之间相互调用:使用this(相应参数);(必须放在该方法的第一行,并且调用不能成环)
a.调用本类的构造方法:this(参数)
b.调用本类中普通方法:this.方法名称()
当前调用的成员方法或变量是通过对象A调用的,则此时this就是代表A
根据代码块定义的位置及关键字分为:
普通代码块:定义在方法中,使用{}括起来的代码块 构造代码块:定义在类中,不加任何修饰符,直接使用{}定义的代码块当产生对象时执行构造代码块,优先于构造方法执行。并且有几个对象产生就执行几次构造代码块
当类加载时执行一次,与对象产生无关。
类加载:就是把需要使用的类加载到JVM中
当调用println方法进行对象输出时,默认输出的时该对象地址hash()->
若想输出对象的内容时,再类中提供toString()方法即可
public String toString(){ String str = "name" + name + ",age = " + age; return str; }2.匿名对象:一个对象没有任何引用指向
new Person( );
只能使用一次,没有任何应用指向
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)