Java 学习 第二篇;面向对象 定义类的简单语法:
1:基本知识
[public / protected / private] class 类名
{
零个到多个构造器定义;
零个到多个属性;
零个到多个方法;
}
其中类中各个成员之间的顺序没有关系,且各个成员之间可以相互调用,但是static修饰的成员不能访问没有static修饰的成员;
static 修饰的成员表明它是属于这个类共有的而不是该类的单个实例!
定义属性的语法格式:
[public / protected / private] [static | final] Type 属性名
定义方法的语法格式;
[public / protected / private] [abstract /final] [static] 返回值类型 方法名(参数表)
{ };
构造器的定义;
[p/p/p] 构造器名(参数表){};
注意构造器无返回值类型!
1.2对象的产生和使用
1
Person p;
2
p = new Person();
3
4
可简写成:
5
Person p = new Person();
this关键字是一个对象默认引用。this关键字总是指向调用该方法的对象. this关键字最大的作用就让类中一个方法,访问类的另一个方法或属性。
static修饰的方法和属性,既可以通过类来调用,也可以通过实例(对象)来调用,没有使用static修饰的普通方法和属性,则只能通过实例来调用。
如果需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。
1.3关于static
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何
对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 用public修饰的static成员变量和成员
方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:
1
类名.静态方法名(参数列表...)
2
类名.静态变量名
声明为static的方法有以下几条限制:
1、它们仅能调用其他的static 方法。
2、它们只能访问static数据。
因为static修饰的成员属于类成员,在类初始化阶段就会被执行,载入内存。而普通成员需要在具体创建实例后才能被执行。所以若在static修饰的成员内访问普通方法,亲,别人还没创建实例,还不
存在呢,咋调用访问? 若同样都是static方法,大家都在类初始化阶段被执行了,就可以调用了。
3、它们不能以任何方式引用this 或super。
this是指向对象的,而我们又知道static定义的成员是类成员,不属于任何一个实例,并且类成员的执行是在创建实例之前的,所以,在类成员内使用this,系统不知道指向何处,因为没有
对象;
2:在java方法的所属性主要体现在如下几个方面:
-> 方法不能独立定义只能在类中定义;
-> 从逻辑上来看发发要么属于一个类要么属于一个对象;
-> 不能独立执行方法,执行方法只能使用类或者或者对象作为调用者;
3: 方法的参数传递机制;注意参数传递在被调函数和主函数使用不同的栈空间和c语言中基本相同直接调用交换函数结果是没有交换;
4:形参长度可变的方法 示例:
public static void main(String[] args) {
// TODO Auto-generated method stub
test("sss","sss");
}
public static void test(String ...sb)
{
for(String temp:sb)
System.out.println(temp);
}
可以输出 sss sss;两个字符串
5:方法重载不做赘述,只要形参表不相同即可;
6:成员变量和局部变量
成员变量即是在类范围内定的变量也就是属性;局部变量是在一个方法内定义的变量;
* ->实例属性(没有static修饰)
* -> 成员变量* *
* * ->类属性 (有static修饰的属性)
变量 *
* * ->形参
* ->局部变量 * * ->方法局部变量
* ->代码块局部变量
7:示例:
public class Person
{
public String name;
public static int eyeNum;
}
下面分析下 在执行语句: Person p=new Person();内存中的过程
首先如果这行代码是第一次使用这个类,则系统通常会在第一次使用Person类时候加载这个类,并且做初始化;首先会为类属性中的 eyeNum 分配内存空间并赋初始值 eyeNum=0;
然后才是隐含的创建了一个新的Person类的实例并将这个Person对象赋给p (Person对象在堆中保存)
如果,有第二个Person p1=new Person(); 这次就不用从新加载Person类;
8:隐藏和封装;Java的访问控制符; private 、public、protected。
private 修饰的方法和属性值 只能在本类中使用;
default 修饰的方法和属性值 只能在本包中使用;
protected 修饰的方法和属性值 只能在本包中使用,还可以被不同包中的子类访问;
public 修饰的方法和属性值 任何情况下局可以被访问;
9:package 和import
需要注意的是父包和子包表示了某种内在的逻辑关系,但是父包和子包在使用时不存在任何关系,如果父包需要使用子包中的类那么必须使用子包的全名;
为了简化编程使用import关键字直接向Java文件中导入该Java类的全部类,import 出现在package之后 class定义之前;
Java 学习 第二篇;面向对象 定义类的简单语法:的更多相关文章
- 从.Net到Java学习第二篇——IDEA and start spring boot
从.Net到Java学习第一篇——开篇 所谓工欲善其事,必先利其器,做java开发也一样,在比较了目前最流行的几个java IDE(eclipse,myeclipse.IDEA)之后,我果断选择IDE ...
- Java学习第二篇:类,对象,成员属性,成员方法,构造方法,类变量,类方法
一.类的定义 一个全面的类定义是比较复杂的, 定义如下:
- Java学习第二篇 — 时间类的使用
package DateTest; import java.util.Date; public class Date1 { public static void main(String[] args) ...
- java学习第二天面向对象.day08
this 在方法中表示调用当前方法的对象,this与主方法中对象类名调用是同理的,也是去指向堆中的地址. this可以解决成员变量和形参的问题 使用构造器还是setter方法 构造器:在创建对象的时侯 ...
- java学习第二天面向对象.day07
变量的生命周期 成员变量:存储在堆内存中,随着对象的销毁而销毁 局部变量:存储在栈内存中,随着所定义方法的调用结束而销毁 局部变量存储在方法中,每次调用方法都会在栈空间开辟一块内存空间--栈帧,方法调 ...
- java 学习第二篇关系运算符和布尔值
关系运算符,顾名思义.用来看什么关系.(也就是用来比较) 看下表 JAVA 关系运算符 a=6,b=5 关系运算符 举例 值 解释 > a>b true a大于b < a<b ...
- 从.Net到Java学习第一篇——开篇
以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍
Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...
随机推荐
- ACM训练计划step 2 [非原创]
(Step2-500题)POJ训练计划+SGU 经过Step1-500题训练,接下来可以开始Step2-500题,包括POJ训练计划的298题和SGU前两章200题.需要1-1年半时间继续提高解决问题 ...
- UIAutomator 学习版
1.要写UIAutomator的testcase,首先要用Eclipse创建一个Java Project 需要将Junit 的lib加入到工程里 2.添加android.jar和uiautomator ...
- GridView 设置背景透明以及Item的点击动画
//将点击时的背景色设置为透明 gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); 此时点击GridView的每个Item就不会出现 ...
- iPhone 和Android应用,特殊的链接:打电话,短信,email;
http://ice-k.iteye.com/blog/1426526 下面的这篇文章主要是说,网页中的链接如何写,可以激活电话的功能. 例如,页面中展示的是一个电话号码,当用户在手机浏览器里面点击这 ...
- Codeforces 366C Dima and Salad
http://codeforces.com/problemset/problem/366/C 题意:在一个冰箱里有n种水果,并且这些水果每一种都有一个美味度和一个卡路里的属性, 小明要从这些水果中选出 ...
- Altium designer PCB king (收录各种版本)
不要再留念protel99se这么古老的PCB软件了,宝刀也经不起岁月的磨练. 相比Altium Designer,protel99se逊色多了.虽然很多人还是用这把已经快老的刀.作为新时代的新人,我 ...
- C51汇编伪指令
1.DS ---预留存储区命令格式: [标号:] DS 表达式值其功能是从指定地址开始,定义一个存储区,以备源程序使用.存储区预留的存储单元数由表达式的值决定. ;从标号TEP地址处开始保留1个存 ...
- linux下tcpdump命令详解
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- c++在函数后面加const
非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为 ...
- VS 2012 显示Link的参数
VC 通过Link将cl编译出来的.obj文件链接到一起.不过默认设置还是看不到究竟是怎么做的.需要如下设置: 右键点击工程,选择Properties菜单,然后选择左边的Linker->Gene ...