JavaSE学习之--类和对象(一)+https://developer.aliyun.com/article/1413482
3.默认初始化:
上文已经提到过,成员变量不初始化也可以以通过编译,并有默认值,主要是因为编译器提供了一个默认的构造方法,在对象创建时就会被调用。实际上,通过new关键字来实例化对象要做的工作很多!
4.就地初始化(在创建成员变量时就直接赋值)
// 就地初始化(写死了) public String name = "绿子"; public String sex = "girl"; public int age = 18;
封装:
1.引入:
我们见到的电脑主机往往都被一层黑壳包住,我们只需要通过主机上的接口来实现和计算机之间的交互。但实际上,主机内部有着复杂的电子元件,来实现特定的功能!但我们并不关心他内部的属性,以及如何运转的,我们只需要通过接口来实现交互,这种将属性和内部方法(实现细节)隐藏的做法就是封装!
2.访问修饰限定符:
在计算机中,通过类来存储属性和方法!那如何实现封装呢?通过访问修饰限定符来实现!
public:公开,可跨包,跨类
protected: 不能跨包
default:默认权限,不可跨包
private:只能在同一包同一类使用
public class Stu2 { // 访问修饰限定符 private int age; String sex; public String name; public Stu2(int age,String sex,String name) { this.age = age; this.name = name; this.sex = sex; } public void stuRun() { System.out.println(this.name+"i am running!"); } public void stuSleep() { System.out.println(this.name + "i am sleeping!"); } public static void main2(String[] args) { Stu2 stu = new Stu2(14,"男","边度"); System.out.println(stu.age);// private 只能在Stu2类中访问 System.out.println(stu.sex);// default 默认权限,可以在当前包中任意类访问 System.out.println(stu.name);// public 公开权限,可跨包访问 stu.stuRun(); stu.stuSleep(); } }
private:无法跨类访问
一般情况下,成员变量设置为private,方法设置为public
那如果我想在类外使用private属性的成员变量该怎么办呢?答案是:使用set和get方法(方法被设置为公开的,无法访问成员变量,但可以访问方法,通过方法来访问成员变量)
3.set和get方法的创建
快速创建set和get方法的步骤:
包:
引入:
上文提到default无法跨包访问,那什么是包呢?包就是类的集合,是用来管理类的!可以把包理解为一个大的文件夹,里面存放的是各种类,通过包可以很好的组织,管理类!比如当你不想当前包的类被其他包访问,就可以修饰为default;包还有一个重要的作用,在同一个工程内,可以出现两个相同名字的类,只要处于不同的包中。(在两个文件夹内都有“周杰伦歌曲”这个类,电脑也不会报错)
1.导入包中的类
其实Java中提供了很多的现成的类供我们使用,比如常见的util类,Arrays类等等;在使用这些类时,要进行相应的导入,导入是通过import
如果需要使用 java.util 中的其他类, 可以使用 import java.util.*
import java.util.*; import java.sql.*; Date date = new Date();// err // 如果存在访问冲突,要写具体,是哪个包中的类 java.util.Date date = new java.util.Date();
2.使用static导入静态包
import static java.lang.Math.*; public static void main(String[] args) { double x= 2.0; double y = 3.0; System.out.println((Math.pow(x, 2) + Math.pow(y, 2)));// 13.0 // 添加static关键字,可以直接使用方法名,不需要再添加Math了,这样写更方便,但不建议用 System.out.println(pow(x, 2) + pow(y, 2)); }
注意:
import和C语言中的include不一样,include是导入文件,import是导入相应的类,使用相应的方法!!!同时,include包括所有函数的具体实现方法,Import只是导入接口的声明,并不包括具体的实现细节;include加头文件是在预处理阶段就进行的,而import是在编译阶段进行
3.创建自定义包:
4.通过自定义包再次深入理解访问修饰限定符的权限:
常见的包:
1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
2. java.lang.reflect:java 反射编程包;
3. java.net:进行网络编程开发包。
4. java.sql:进行数据库开发的支持包。
5. java.util:是java提供的工具程序包。(集合类等) 非常重要
6. java.io:I/O编程开发包。
在编译器中快速查看常见包:双击shift
静态成员(类成员)
1.定义:
所有对象共享的成员变量就叫做静态成员变量!通过static关键字修饰。静态成员变量不属于对象,而是属于类!推荐通过类来访问静态成员变量!
class Stu{ // 实例成员变量-->每个对象都包含一份 int age; String name; String sex; // 假如三位学生都是一个班的,现在要创建一个classroom的成员变量 // 由于他们都是一个班的,可以说他们共享一个“classroom” // 共享的成员变量就是静态成员变量 public static String classroom = "110"; public Stu(int age, String name, String sex) { this.age = age; this.name = name; this.sex = sex; } } public class Test { public static void main(String[] args) { Stu stu1 = new Stu(15,"biandu","boy"); Stu stu2 = new Stu(18,"绿子","girl"); Stu stu3 = new Stu(19,"栀子","boy"); // 直接通过类名访问(推荐) System.out.println(Stu.classroom); // 通过对象访问(不推荐) System.out.println(stu1.classroom); System.out.println(stu2.classroom); System.out.println(stu3.classroom); }
2.类变量不属于对象,继而他并不存在于堆区,而是存在于方法区!
JavaSE学习之--类和对象(三)+https://developer.aliyun.com/article/1413486