java入门_面向对象基础

java学习笔记03

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 }

猜你喜欢

转载自www.cnblogs.com/bfcs/p/10305887.html