• java 面向对象基本概念


    1.面向对象与面向过程 

      (1).都是解决问题的思维方式,都是代码组织的方式。

      (2).解决简单问题可以使用面向过程

      (3).解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。

    2.面向对象思考方式

      遇到复杂问题,先从问题中找名词,然后确立这些名词哪些可以作为,再根据问题需求确定类的属性和方法,确定类之间的关系。

      一个经典的比喻:面向对象是盖浇饭、面向过程是蛋炒饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。

    3.面向对象内存分析  

      对象空间的分配:使用new关键字创建对象即可

      对象空间的释放:将对象赋值null即可。垃圾回收器将负责回收所有”不可达”对象的内存空间

      的特点如下

      (1). 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)

      (2). JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)

      (3). 栈属于线程私有,不能实现线程间的共享!

      (4). 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

      

      的特点如下:

      (1). 堆用于存储创建好的对象和数组(数组也是对象)

      (2). JVM只有一个堆,被所有线程共享

      (3). 堆是一个不连续的内存空间,分配灵活,速度慢!

      

      方法区(又叫静态区)特点如下:

      (1). JVM只有一个方法区,被所有线程共享!

      (2). 方法区实际也是堆,只是用于存储类、常量相关的信息!

      (3). 用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)

      

    4.构造方法

      构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。

      重载:形参类型、形参个数、形参顺序不同

     1 public class User {
     2     int id; // id
     3     String name; // 账户名
     4     String pwd; // 密码
     5     public User() {
     6  
     7     }
     8     public User(int id, String name) {
     9         super();
    10         this.id = id;
    11         this.name = name;
    12     }
    13     public User(int id, String name, String pwd) {
    14         this.id = id;
    15         this.name = name;
    16         this.pwd = pwd;
    17     }
    18     public static void main(String[] args) {
    19         User u1 = new User();
    20         User u2 = new User(101, "张三");
    21         User u3 = new User(100, "李四", "1234");     
    22     }
    23 }

    5.this

      创建一个对象分为如下四步:

      (1). 分配对象空间,并将对象成员变量初始化为0或空

      (2). 执行属性值的显示初始化

      (3). 执行构造方法

      (4). 返回对象的地址给相关的变量

      this的本质就是“创建好的对象的地址”! 由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。

       this不能用于static方法中

    6.static

       在static方法中不可直接访问非static的成员。

        static修饰的成员变量和方法,从属于类。

                普通变量和方法从属于对象的。

     1 public class User2 {
     2     int id; // id
     3     String name; // 账户名
     4     String pwd; // 密码
     5      
     6     static String company = "阿里巴巴"; // 公司名称
     7      
     8      
     9     public User2(int id, String name) {
    10         this.id = id; //不写this,无法区分局部变量id和成员变量id
    11         this.name = name;
    12     }
    13      
    14     public void login() {
    15         printCompany();
    16         System.out.println(company); 
    17         System.out.println("登录:" + name);
    18     }
    19      
    20     public static void printCompany() {
    21 //         login();//调用非静态成员,编译就会报错
    22         System.out.println(company);
    23     }
    24      
    25     public static void main(String[] args) {
    26         User2 u = new User2(111, "小七");
    27         User2.printCompany();
    28         User2.company = "阿里巴巴";
    29         User2.printCompany();
    30     }
    31 }

    7.静态初始化块

      构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非static成员。

      静态初始化块执行顺序:

      (1). 上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。

      (2). 构造方法执行顺序和上面顺序一样。

     1 public class User3 {
     2     int id;        //id
     3     String name;   //账户名
     4     String pwd;   //密码
     5     static String company; //公司名称
     6     static {
     7         System.out.println("执行类的初始化工作");
     8         company = "阿里巴巴";
     9         printCompany();
    10     }  
    11     public static void printCompany(){
    12         System.out.println(company);
    13     }  
    14     public static void main(String[] args) {
    15         User3  u3 = new User3();
    16     }
    17 }

    8.package  

      1. 通常是类的第一句非注释性语句。

      2. 包名:域名倒着写即可,再加上模块名,便于内部管理类。

    1 package com.chb.test

    9.包

      如果我们要使用其他包的类,需要使用import导入,从而可以在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。import后,便于编写代码,提高可维护性。

                    JDK中的主要包

    Java中的常用包

    说明

    java.lang

    包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。

    java.awt

    包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。

    java.net

    包含执行与网络相关的操作的类。

    java.io

    包含能提供多种输入/输出功能的类。

    java.util

    包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。

      

      (1). Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。

      (2). 如果导入两个同名的类,只能用包名+类名来显示调用相关类:

      (3).静态导入(static import)是在JDK1.5新增加的功能,其作用是用于导入指定类的静态属性,这样我们可以直接使用静态属性。

     1 package com.chb;
     2  //以下两种静态导入的方式二选一即可
     3 import static java.lang.Math.*;//导入Math类的所有静态属性
     4 import static java.lang.Math.PI;//导入Math类的PI属性
     5  
     6 public class Test2{
     7     public static void main(String [] args){
     8         System.out.println(PI);
     9         System.out.println(random());
    10     }
    11 }
  • 相关阅读:
    PGsql(PostgreSQL)的本地连接和远程连接的问题
    CreateFolder文件夹操作【Create】
    给Windows Phone Application 换开发环境!
    C#函数,PadLeft(),填充指定数量的空格。
    sql中格式化字符串或时间,遇到多少,写多少,持续记录。
    C# 将字符串转换成GB2312很蛋疼的一个Class
    asp.net获取客户端IP Class
    MessageBox HelperClass
    Cookie帮助类
    今何していますか
  • 原文地址:https://www.cnblogs.com/bfcs/p/10305887.html
Copyright © 2020-2023  润新知