java是一门面向对象的语言,而对象是类的一个实例,有行为和状态。类是一个模板,它描述一类对象的行为和状态。所以本文将从一个类作为模板的角度,从结构上对类这个抽象概念进行分析描述。 说明:图中标红的属于类这个概念,由于匿名内部类,比较特殊(它与局部类很相似,不同的是它没有类名,如果某个局部类你只需要用一次,就可以采用局部内部类来定义它)所以在模板图中就不做展示,关于抽象类会在抽象方法中做说明。 常量是指在程序的整个运行过程中值保持不变的量,常量值又称为字面常量,它是通过数据直接表示的。常量不同于常量值,它可以在程序中用符号来代替常量值使用,因此在使用前必须先定义。常量与变量类似也需要初始化,即在声明常量的同时要赋予一个初始值。常量一旦初始化就不可以被修改。 它的声明格式为: 其中,final 是定义常量的关键字,dataType 指明常量的数据类型,variableName 是变量的名称,value 是初始值.,例如: 由final和static共同修饰的为静态常量。例如: 静态常量和常量的区别: static+final final 在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: 格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。如: 静态成员变量:也叫类变量,独立于方法之外的变量,用 static 修饰。 注意: static修饰的成员变量属于类,不属于某个对象。即:多个对象访问或修改static修饰的成员变量时,其中一个对象将static成员变量进行了修改,其它的对象的static成员变量值跟着改变,即多个对象共享同一个static成员变量。 举例如下:创建狗类对象时,默认给值 为1,之后依次被修改。具体代码及运行结果如下 输出结果为: static代码块指的是 使用 构造方法,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。 语法规则: 1.方法名必须与类名相同 2.无返回值类型,也不能用void修饰(有任何返回值类型的方法都不是构造方法) 3.可以指定参数,也可以不指定参数;分为有参构造方法和无参构造方法 构造方法的特点: 1.当没有指定构造方法时,系统会自动添加无参的构造方法。 2.构造方法可以重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法。 3.构造方法是不被继承的 4.当我们手动的指定了构造方法时,无论是有参的还是无参的,系统都将不会再添加无参的构造方法。 例如,创建一个Person 类,添加age,name 属性,并添加无参构造及有参构造 首先内部类的概念是:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。 成员内部类:在方法外类内定义类。(具体细节及注意事项等在下面代码中注明) 静态内部类:成员内部类加上static(具体细节及注意事项等在下面代码中注明) 方法的定义: 权限修饰符 返回值类型 方法名(参数类型 参数名) { // 方法体 // 返回值 } 静态方法:static修饰的方法,从属于类。最常见的main()方法就是一个静态方法 静态方法随着类的加载而加载到方法区的静态方法区里,与类同级也叫类方法,通过类名.形式来调用。静态方法存放在静态区里不会被赋予系统默认初始值,当静态方法被调用时会加载到栈中进行执行(类名.形式–参考如下代码)。 注意事项: 普通方法:没有static,final 等关键字修饰的方法 最终方法:被 final 修饰的方法 注意事项: 抽象方法:被关键字abstract 修饰的方法 当父类中的某个方法被所有子类进行不同程度的重写,那么父类里的这个方法就没有实际意义,则舍弃掉方法体,加上 abstract 变成抽象方法(没有方法体—一定要重写)。 抽象方法所在的类就是抽象类。如果普通类继承抽象类,那么需要重写所有的抽象方法,如果不想重写,则类需要修改为抽象类。 注意: 方法内部类:方法内定义的类。 注意: 前言
模板图
1.成员变量
1.1常量
final dataType variableName = value;
final int i =5;
1.2静态常量
final static int i=6;
1.3.普通变量
type identifier [ = value][, identifier [= value] ...] ;
class Demo{ int = 5; }
1.4静态成员变量
public class Demo { public static void main(String[] args) { //创建对象dog1 Dog dog1 = new Dog(); //调用test 方法 dog1.test(); //直接通过类名调用,并修改 Dog.age = 2; System.out.println("类名调用修改后的age:"+Dog.age); //通过对象修改 int age = dog1.age; age = 3; System.out.println("对象调用修改后的age:"+age); } } //创建狗类 class Dog{ static int age = 1; public void test(){ System.out.println("狗类中的age:"+age); } }
2.代码块
2.1静态代码块
static{}
包裹的代码块,且静态代码只执行一次,可以通过Class.forName("classPath")
的方式唤醒代码的static代码块,但是也执行一次。
class Demo{ //属性 static int age; //静态代码块 //静态信息初始化(预先加载资源) static { age = 1; System.out.println("静态代码块"); } }
2.2构造代码块
{}
包裹的代码区域,这里的代码区域特指位于class{}
下面的而不是存在于其他type method(){}
这类函数下面的代码区域
class Demo{ { System.out.println("构造代码块"); } }
3.构造方法
class Person{ //属性 int age; String name; //无参构造 public Person() { } //一个参数构造 public Person(int age) { this.age = age; } //多个参数的构造 public Person(int age, String name) { this.age = age; this.name = name; } }
4.内部类
4.1成员内部类
/** * 成员内部类 */ public class InnerDemo2 { public static void main(String[] args) { /** * 方法一 */ //创建成员内部类对象 Outer2.Inner2 inner2 = new Outer2().in; //对象调用内部类方法 inner2.n(); /** * 方法二 */ Outer2.Inner2 inner21 = new Outer2().new Inner2(); //对象调用内部类方法 inner2.n(); } } //外部类 class Outer2{ //属性 static int i =1; //非静态属性,可以通过对象调用 Inner2 in = new Inner2(); /** * 成员内部类:可以当成一个大的属性 * 1.可以定义所有的非静态信息(属性,方法)及静态常量 * 2.可以被4个访问权限修饰符修饰及final、abstract * 3.可以获取外部类所有信息 */ class Inner2{ int x=2; static final int xx =3; //报错 static 不能修饰 //static int xxx =4; public void n(){ System.out.println(i); m(); } } //方法 public void m(){} }
4.2静态内部类
/** *静态内部类 */ public class InnerDemo3 { public static void main(String[] args) { //创建静态内部类对象 Outer3.Inner3 inner3=new Outer3.Inner3(); inner3.n(); } } //外部类 class Outer3{ //属性 static int i=1; //静态内部类 //可以定义所有的信息以及静态常量 //可以进行继承和实现 //可以被访问权限修饰符以及final/abstract //只能获取外部类的所有静态信息 static class Inner3 extends Object implements Cloneable{ static final int x=2; public void n(){ System.out.println(i); } } //方法 public void m(){} }
5.成员方法
5.1静态方法
public class Demo { public static void main(String[] args) { } }
public class Demo { public static void main(String[] args) { //直接通过类名.形式来调用 Dog.eat(); } } //创建狗类 class Dog{ static void eat(){ System.out.println("狗吃东西"); } }
5.2普通方法
//创建狗类 class Dog{ public void sleep(){ System.out.println("狗在睡觉"); } }
5.3最终方法
public class demo { //编写最终方法add public final static int add(int a,int b) { return a+b; } } //此时会报错“cannot override the final method from demo” //不能重写来自demo的最终方法 public class mydemo extends demo{ public static int add(int a,int b) { return a+b; } public static void main(String[] args) { int x=10; int y=2; System.out.println(add(x,y)); } }
//非最终类包含最终方法 class demo { public final static int add(int a,int b) { return a+b; } public static void main(String[] args) { int x=20; int y=5; System.out.println(x/y); System.out.println(add(x,y)); } } //运行结果: //4 //25
5.4抽象方法
抽象类
/** * 抽象类:Employee */ abstract class Employee { //属性 private String name; private String address; private int number; //抽象方法 public abstract double computePay(); }
5.5方法内部类
package com.tedu.inner; /** * 方法内部类 */ public class InnerDemo1 { public static void main(String[] args) { //外部类对象调用m()方法,执行创建内部类对象的代码 new Outer1().m(); } } //外部类 /** * 类只能被public default 修饰 */ class Outer1{ //属性 int x = 1; //方法 public void m(){ /** * 1.jdk 1.8 开始默认底层加上final * 2.jdk1.7 及其以前需要强制加上final */ int k = 10; //此处修改k=8 内部类System.out.println(k); 就会报错 //k=8; //方法内部类 /** * 1.可以定义所以非静态属性和方法以及[静态常量] * 2.可以进行正常的继承和实现 * 3.不能被访问权限修饰符修饰,但是可以被final,abstract 修饰 * 4.方法内部类,可以获取外部类所有的信息 * 5.只能获取本方法中的常量信息 */ class Inner1 extends Object implements Cloneable{ int y = 2; //静态属性和方法不行 //静态区没有存储所以 static final int yy=2; public void mn(){ System.out.println(x); n(); //只有拿本方法中的变量才会默认加上final,否则不加,比如上面执行k=8时,就 //不会添加final System.out.println(k); //报错,k 默认是常量不能被改变 //System.out.println(k=1); } } //在本方法中创建内部类实例 Inner1 inner1 = new Inner1(); inner1.mn(); } public void n(){} }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算