---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
封装:Encapsulation
是指隐藏对象的属性和实现细节,仅对外提供公共访问的方式。
好处:
将变化隔离
便于使用
提高重用性
提高安全性
封装原则:
将不需要对外提供的内容都隐藏起来
把属性都隐藏提供公共访问方法对其访问。
函数就是java代码中最小的封装体。
构造函数:
特点:
函数名于类名相同
不用定义返回值类型
不可以写return语句
作用:
给对象进行初始化。
注意:
1、默认构造函数的特点。
2、多个构造函数是以重载形式存在的。
package day03;
/*
* 静态关键字:static
* 用法:是一个修饰符,用于修饰成员(成员变量和成员方法)
* 当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类调用
* 调用方法: 类名.静态成员
*
* static 特点:
* 1.随着类的加载而加载,随着类的消失而消失
* 也就是说静态会随着类的消失而消失,说明他的生命周期最长。
* 2,优先于对象存在
* 明确一点:静态时先存在的,对象是后存在的
* 3.被所有的对象所共享
* 4,可以直接被类名所调用
*
* 实例变量和类变量的区别:
* 1.存放位置:类变量随着类的加载而存在于方法区中。
* 实例变量随着对象的建立而存在于堆内存中。
* 2.生命周期:类变量:生命周期最长,随着类的消失而消失
* 实例变量生命周期随着对象的消失而消失。
*
* 静态的使用注意事项:
* 1、静态方法只能访问静态成员
* 非静态方法既可以访问静态,也可以访问非静态
* 2、静态方法中不可以定义this、super关键字。
* 因为静态优先于对象存在。所以静态方法中不可以出现this。
* 3、主函数是静态的。
*
* 静态有利有弊:
* 利处:对对象的共享数据进行单独空间存储,节省空间。没有必要每一个对象中都存储一份。
* 可以直接被类名调用。
* 弊端:生命周期过长。
* 访问出现局限性。(静态虽好,只能访问静态)
*/
class Person{
static String country="CN"; //静态的成员变量,也叫类成员变量
String name; //成员变量,也叫实例变量
int age;
public static void show(){
System.out.println("country="+country);
}
}
public class StaticDemo {
public static void main(String [] args){
// Person p=new Person();
// p.show();
System.out.println("静态调用 "+Person.country); //静态调用 类名.静态成员
Person.show(); //调用静态方法
}
}
package day03;
/*
* 什么时候使用静态?
* 要从两方面下手:
* 因为静态修饰的内容有成员变量和函数
* 什么时候定义静态变量(类变量)呢?
* 当对象中出现共享数据时,该数据被静态所修饰,
* 对象中的特有数据要定义成非静态,存在于堆内存中。
*
* 什么时候定义静态函数呢?(重点)
* 当功能内部没有访问到非静态数据(对象的特有数据),
* 那么该功能科以定义成静态的
*
*
*/
class Person3{
String name;
public static void show(){
System.out.println("hah");
}
}
public class StaticDemo01 {
public static void main(String [] args){
Person3.show();
}
}
package day03;
/*
* public static void main(String [] args){}
*
* 主函数:是一个特殊的函数。作为程序的入口,可以被JVM调用。
*
* 主函数的定义:
* public:代表着该函数访问权限是最大的。
* static:代表主函数随着类的加载已经存在了
* void :主函数没有具体的返回值
* main:不是关键字,但是是一个特殊的单词,可以被JVM识别
* (String [] args):函数的参数,参数的类型是一个数组,该数组中的元素师祖父串。字符串类型的数组
* 主函数是固定格式的:JVM识别。
*
* JVM在调用主函数时,传入的是new String[0];
*
*/
public class MainDemo {
public static void main(String [] args){
String arr []={"hah","heh","heih","huh"};
MainTest.main(arr);
}
}
class MainTest{
public static void main(String [] args){ //唯一可以改变的是args(arguments) args的值只有两个 一个是数组,另一个是null
System.out.println("数组的长度:"+args.length);
for(int x=0;x<args.length;x++){
System.out.println(args[x]);//new String[];
}
}
}
package day03;
/*
* 静态的应用:
* 每个应用程序中都有共性的功能,
* 可已将这些功能进行抽取,独立封装
* 以便复用
*
*
* 虽然可以通过建立ArrayTool的对象使用这些工具的方法,对数组进行操作
* 发现了问题:
* 1.对象时用于封装数据的,可是ArrayTool对象并未封装特有数据
* 2.操作数组的每一个方法都没有用到ArrayTool对象中特有的数据
*
* 这时考虑,让程序更严谨,是不需要对象的。
* 可以将ArrayTool中的方法都定义成static的,直接通过类名调用即可。
*
*
* 将方法都静态后,可以方便与使用,但是该类还是可以被其他程序建立对象的
*
* 为了更为严谨,强制该类不能建立对象
* 可以通过将构造函数私有化
*/
public class ArrayToolDemo {
public static void main(String [] args){
int [] arr={1,3,5,4,9,2,56,7,99};
//创建对象,然后调用,在这个程序里面没有必要创建对象
// ArrayTool tool=new ArrayTool();
// System.out.println("max="+tool.getMax(arr));
// System.out.println("min="+tool.getMin(arr));
// tool.selectSort(arr);
//类直接调用定义好的工具,显得比较方便
System.out.println(ArrayTool.getMax(arr));
ArrayTool.printArray(arr);
// ArrayTool.selectSort(arr);
// ArrayTool.printArray(arr);
ArrayTool.bubbleSort(arr);
ArrayTool.printArray(arr);
}
}
class ArrayTool{
private ArrayTool(){
//将构造函数私有化,目的就是不让其他类创建对象
}
//获取数组最大值
public static int getMax(int [] arr){
int max=0;
for(int x=0;x<arr.length;x++){
if(arr[x]>arr[max])
max=x;
}
return arr[max];
}
//获取数组的最小值
public static int getMin(int [] arr){
int min=0;
for(int x=0;x<arr.length;x++){
if(arr[x]<arr[min])
min=x;
}
return arr[min];
}
//数组的排序
public static void selectSort(int [] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
swap(arr,x,y);
}
}
}
}
public static void bubbleSort(int [] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-x-1;y++){
if(arr[y]>arr[y+1]){
swap(arr,y,y+1);
}
}
}
}
//数组排序中换位置的方法
private static void swap(int [] arr,int a,int b){
int temp=0;
temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
//打印数组的方法
public static void printArray(int [] arr){
System.out.print("[");
for(int x=0;x<arr.length;x++){
if(x!=arr.length-1){
System.out.print(arr[x]+",");
}
else
System.out.print(arr[x]);
}
System.out.println("]");
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
分享到:
相关推荐
黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip
黑马程序员_毕向东最新经典Java基础视频
黑马程序员毕向东java基础视频教程全套
黑马程序员_毕向东_Java基础视频教程第18天-12-IO流(文本文件读取练习).zip
黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件).zip
黑马程序员_毕向东_Java基础视频教程第18天-13-IO流(拷贝文本文件).zip
黑马程序员_毕向东_Java基础视频教程第18天-09-IO流(文件的续写)
黑马程序员_毕向东_Java基础视频教程第05天-01-面向对象(概述).avi
黑马程序员_毕向东_Java基础视频教程第18天-11-IO流(文本文件读取方式二).zip
《传智播客毕向东Java基础全套视频教程》黑马程序员下载地址.txt ) 完整的视频资源,入门必备.
毕向东的基础代码 黑马程序员 初学者必备
传智播客_Java培训_毕向东_Java基础[07-IO]系黑马程序员_毕向东_Java基础视频教程
传智播客_Java培训_毕向东_Java基础[08-GUI]系黑马程序员_毕向东_Java基础视频教程 GUI •Graphical User Interface(图形用户接口)。 • 用图形的方式,来显示计算机操作的界面,这样更方便更直 观。 CLI •...
传智播客_Java培训_毕向东_Java基础[02-Java基础语法1]系黑马程序员_毕向东_Java基础视频教程
传智播客_Java培训_毕向东_Java基础[02-Java基础语法2]是黑马程序员_毕向东_Java基础视频教程
传智播客_Java培训_毕向东_Java基础[03-面向对象]系黑马程序员_毕向东_Java基础视频教程
传智播客_Java培训_毕向东_Java基础[05-多线程]系黑马程序员_毕向东_Java基础视频教程
传智播客_Java培训_毕向东_Java基础[04-继承上]系黑马程序员_毕向东_Java基础视频教程
传智播客_Java培训_毕向东_Java基础[04-继承下]系黑马程序员_毕向东_Java基础视频教程
黑马程序员 - 毕向东 - Java基础教学 - 第02天 个人观看视频总结文档