1.面向对象与面向过程 java
(1).都是解决问题的思惟方式,都是代码组织的方式。数组
(2).解决简单问题可使用面向过程网络
(3).解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。dom
2.面向对象思考方式函数
遇到复杂问题,先从问题中找名词,而后确立这些名词哪些能够做为类,再根据问题需求肯定类的属性和方法,肯定类之间的关系。工具
一个经典的比喻:面向对象是盖浇饭、面向过程是蛋炒饭。盖浇饭的好处就是“菜”“饭”分离,从而提升了制做盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。this
3.面向对象内存分析 spa
对象空间的分配:使用new关键字建立对象便可.net
对象空间的释放:将对象赋值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 }