赞
踩
目录
3、 static修饰的静态域(静态属性,静态方法)和成员域(成员属性,成员方法)之间的关系
什么是面向对象 OOP:在java中一切皆对象,找对象,用对象。
三个重要思想:封装,多态,继承。
类内的方法叫成员方法,类内的变量叫成员变量。
一个源文件只能由一个主类 public class,但是class声明的普通类可以存在很多个。
类是一个模板,没有具体的意义,该类的所有对象都具备的成员属性和成员方法(行为)定义在类中。不同对象的属性值和具体表现的行为都是不同的。
通过产生的新类型产生具体对象就是类的实例化。当对象产生时,成员变量才有初始值。成员属性和成员方法必须通过具体的对象来调用。
- public class Test {
- public static void main(String[] args) {
- dog dog = new dog();
- dog.name = "大黄";
- dog.bark();
- dog.wag();
- }
- }
- class dog {
- String name;
- public void bark(){
- System.out.println(name+"汪汪汪!");
- }
-
- public void wag(){
- System.out.println(name+"摇尾巴!");
- }
- }
如上创建了普通类dog,一个成员变量name,两个成员方法bark和wag。
建立了新的对象dog,对name进行了初始化,调用了两个方法。
初始化对象调用构造方法,构造方法就是为了产生对象,给对象属性做初始化操作。
构造方法和类名称相同,没有返回值类型声明,构造方法可以重载(重载的个数不同)。
当类中没有明确定义构造方法,编译器会生成默认的无参构造,若明确定义了构造方法,默认的无参构造就不再产生。
构造方法在创建对象时,由编译器自动调用,且指在对象产生时调用一次。
直接在类中寻找同名的成员变量。
在自己创建的构造方法中使用this.name和this.age给名字和年龄赋值,如果不加this则会在该方法中寻找同名变量则无法赋值。
- public class staticTest {
- public static void main(String[] args) {
- Japanese j1 = new Japanese("小泉",70);
- System.out.println(j1.toString());
- }
- }
- class Japanese{
- String name;
- int age;
-
- public Japanese(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- public static void test(){
- System.out.println("静态方法test");
- }
- public static void fun(){
- System.out.println("静态方法fun");
- }
-
- public String toString() {
- return "Japanese{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", country='" + country + '\'' +
- '}';
- }
- }
2.1修饰成员方法
在一个成员方法中调用另一个成员方法。
- public class number {
- public static void main(String[] args) {
- Person person = new Person("洋洋",22);
- person.test();
- }
- }
- class Person{
- String name;
- int age;
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public void test(){
- this.fun();
- }
- public void fun(){
- System.out.println("姓名为"+this.name+",年龄为"+this.age);
- }
- }
如上述代码,在test方法中调用了fun函数。
2.2调用构造方法
必须写在构造方法中的首行,并且不能成环。
- ublic class number {
- public static void main(String[] args) {
- dog dog = new dog("大黄","黄色");
- }
- }
-
- class dog {
- String name;
- String color;
-
- public dog(){
- System.out.println("自己定义的无参构造!");
- }
-
- public dog(String name, String color) {
- this(name);
- System.out.println("自己定义的name和color的赋值构造");
- this.color = color;
- }
-
- public dog(String name) {
- this();
- System.out.println("自己定义的namer的赋值构造");
- this.name = name;
- }
- }
如图创建对象时调用的是自己定义的赋值给name和color的构造函数,在该构造函数中调用了给name赋值的构造函数,有调用了无参构造函数。
3、表示当前对象引用
- public class number {
- public static void main(String[] args) {
- Person person = new Person("洋洋",22);
- System.out.println(person);
- person.test1();
- }
- }
- class Person{
- String name;
- int age;
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public void test1(){
- System.out.println(this);
- }
- }
test1方法中就调用了当前对象,所以 输出的结果和直接数值对象是一样的。
表示静态,与类相关,和具体的对象无关。
称之为类属性,存放于JVM的方法区。该类的所有对象共享此属性。
- public class staticTest {
- public static void main(String[] args) {
- Japanese j1 = new Japanese("小泉",70);
- System.out.println(j1.toString());
- }
- }
- class Japanese{
- String name;
- int age;
- static String country = "日本";
-
- public Japanese(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public String toString() {
- return "Japanese{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", country='" + country + '\'' +
- '}';
- }
- }
在Japanese类中用static修饰了country变量,所以在定义时就对其进行赋值,不需要在生成对象时再次赋值就可以直接显示它的country。
类方法,直接通过类名称调用,与对象无关。
一个类的工具方法一般设计为静态方法,与具体的对象无关。
- public class staticTest {
- public static void main(String[] args) {
- Japanese.fun();
- Japanese.test();
- }
- }
- class Test{
-
- public static void test(){
- System.out.println("静态方法test");
- }
- public static void fun(){
- System.out.println("静态方法fun");
- }
-
- }
直接用类的名称调用用static修饰的成员方法,不能用对象调用。
不能在静态方法中访问成员域。
在成员方法中可以访问静态域但是不推荐,一般还是使用类名称。
静态变量一般就地初始化或在静态代码块初始化。
直接定义在方法内部,不加任何修饰符定义的代码块称为普通代码块。
用于解决变量重名问题。
直接定义在类中,使用{}的代码块称之为代码块。
特点:每当产生对象时就会默认调用构造块,构造块优先于构造方法执行。
- public class CodeSquare {
- public CodeSquare(){
- System.out.println("1、无参构造");
- }
- {
- System.out.println("2、构造块");
- }
-
- public static void main(String[] args) {
- CodeSquare c1 = new CodeSquare();
- CodeSquare c2 = new CodeSquare();
- }
- }
创建了两个类,则构造方法和构造块都调用了两次,每次构造块都在构造方法前面。
使用static修饰,直接定义在类中的代码块称为静态代码块。
static修饰主方法所以在主方法中也不能使用this调用别的类的方法或者属性。
特点:静态代码块在类加载时执行一次,和具体产生对象无关。若有多个静态代码块,按照代码的书写顺序依次执行。
静态代码块优先于所有别的代码块。
- public class CodeSquare {
- public static void main(String[] args) {
- Demoo d1 = new Demoo();
- }
- }
- class Demoo{
- static int i;
- public Demoo(){
- System.out.println("1、无参构造");
- }
- {
- System.out.println("2、构造块");
- }
- }
静态代码块在构造块前面,构造块在构造方法前面。
主类中的静态代码块优先于主方法执行。
- public class CodeSquare {
-
- static {
- System.out.println("3、主方法的静态块");
- }
-
- public static void main(String[] args) {
- System.out.println("4、主方法");
- CodeSquare c1 = new CodeSquare();
- }
- }
主方法 静态代码块在主方法前面。
4、同步代码块
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。