java面向对象程序设计及构造方法问题

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!java中的面向对象-类和对象-类的构造方法
[问题点数:40分,结帖人JavaChenZhenlin]
java中的面向对象-类和对象-类的构造方法
[问题点数:40分,结帖人JavaChenZhenlin]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|泛型方法可以在方法声明中定义类型参数,它们在方法的返回类型之前的尖括号中指定。包含泛型方法声明的类型不必是通用类型。可以在非静态方法声明中使用为泛型类型指定的类型参数。
示例以下代码显示如何为方法m1()定义新的类型参数V。新类型参数V强制将方法m1()的第一个和第二个参数必须为相同类型。
第三个参数必须与类型T相同,这是类实例化的类型。
class MyBag&T& {
public MyBag(T ref) {
this.ref =
public T get() {
public void set(T a) {
this.ref =
class Test&T&
public &V&
m1(MyBag&V&
a, MyBag&V&
使用通用方法要传递方法的形式类型参数的实际类型参数,必须在方法调用中的点和方法名之间的尖括号&&中指定它。
class MyBag&T& {
public MyBag(T ref) {
this.ref =
public T get() {
public void set(T a) {
this.ref =
class Test&T& {
public &V& void m1(MyBag&V& a, MyBag&V& b, T c) {
public class Main {
public static void main(String[] argv) {
Test&String& t = new Test&String&();
MyBag&Integer& iw1 = new MyBag&Integer&(new Integer(201));
MyBag&Integer& iw2 = new MyBag&Integer&(new Integer(202));
// Specify that Integer is the actual type for the type parameter for m1()
t.&Integer&m1(iw1, iw2, &hello&);
t.m1(iw1, iw2, &hello&);
实例-2以下代码显示了如何声明通用静态方法。不能在静态方法中引用包含类的类型参数。静态方法只能引用它自己声明的类型参数。以下静态通用类型定义了类型参数T,用于约束参数source和dest的类型。
class MyBag&T& {
public MyBag(T ref) {
this.ref =
public T get() {
public void set(T a) {
this.ref =
public class Main {
public static &T& void copy(MyBag&T& source, MyBag&? super T& dest) {
T value = source.get();
dest.set(value);
public static void main(String[] argv) {
要为静态方法调用指定实际的类型参数,可以这样做:
Main.&Integer&copy(iw1, iw2);
通用构造函数可以为构造函数定义类型参数。下面的代码定义了类Test的构造函数的类型参数U。它放置一个约束,构造函数的类型参数U必须是相同的,或者它的类类型参数T类型的子类型。
public class Test&T& {
public &U extends T& Test(U k) {
要为构造函数指定实际的类型参数值,请在 new 运算符和构造函数名称之间的尖括号中指定它,如以下代码段所示:
class Test&T& {
public &U extends T& Test(U k) {
public class Main {
public static void main(String[] argv) {
// Specify the actual type parameter for the constructor as Double
Test&Number& t1 = new&Double& Test&Number&(new Double(1.9));
// Let the compiler figure out, Integer is
// the actual type parameter for the constructor
Test&Number& t2 = new Test&Number&(new Integer(1));
通用对象在创建中的类型推断Java7在通用类型的对象创建表达式中增加了对类型推断的一些有限支持。对于以下语句:
List&String& list = new ArrayList&String&();
在Java7中,可以在上面的语句中指定空尖括号,称为菱形操作符或简单的菱形&&作为ArrayList的类型参数。
List&String& list = new ArrayList&&();
如果不在对象创建表达式中为通用类型指定类型参数,那么类型是原始类型,编译器生成未检查的警告。例如,以下语句将编译产生未选中的警告:
List&String& list = new ArrayList(); // Generates an
不能创建通用的异常类。 并且没有通用的匿名类。
易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。
上一篇:下一篇:
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加3个群。
Java技术群:
(人数:2000,等级:LV5,免费:否)
MySQL/SQL群:
(人数:2000,等级:LV5,免费:否)
大数据开发群:
(人数:2000,等级:LV5,免费:否)
Python技术群:
(人数:2000,等级:LV5,免费:否)
人工智能深度学习:
(人数:2000,等级:LV5,免费:否)
测试工程师(新群):
(人数:1000,等级:LV1,免费:是)
前端技术群(新群):
(人数:1000,等级:LV1,免费:是)
C/C++技术(新群):
(人数:1000,等级:LV1,免费:是)
Node.js技术(新群):
(人数:1000,等级:LV1,免费:是)
PostgreSQL数据库(新群):
(人数:1000,等级:LV1,免费:否)
Linux技术:
(人数:2000,等级:LV5,免费:否)
PHP开发者:
(人数:2000,等级:LV5,免费:是)
Oracle数据库:
(人数:2000,等级:LV5,免费:是)
C#/ASP.Net开发者:
(人数:2000,等级:LV5,免费:是)
数据分析师:
(人数:1000,等级:LV1,免费:是)R语言,Matlab语言等技术Java面向对象-构造方法,this关键字 - eaglezb - 博客园
Java面向对象-构造方法,this关键字
概念:构造方法是一个特殊的方法,这个特殊方法用于创建实例时执行初始化操作;
1 package com.java1234.chap03.sec04;
* 定义人类
* @author user
8 public class People {
<span style="color: #
// 定义属性
<span style="color: #
private S // 实例化对象时,默认值是null
<span style="color: #
private int // 实例化对象时,默认值是0
<span style="color: #
<span style="color: #
<span style="color: #
* 默认构造方法
<span style="color: #
<span style="color: #
<span style="color: #
System.out.println("默认构造方法!");
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
public void say(){
<span style="color: #
System.out.println("我叫:"+name+",我今年:"+age);
<span style="color: #
<span style="color: #
<span style="color: #
public static void main(String[] args) {
<span style="color: #
People people=new People();
<span style="color: #
people.say();
<span style="color: #
<span style="color: # }
运行输出:
默认构造方法!
我叫:null,我今年:0
这里我们发现: 实例化对象的时候,String类型的默认值是null,int基本类型的默认值是0 ;
People(){} 构造方法&
特点 1,没有返回值类型,区别于其他一般方法;
& & & &2,方法名和类名一样;
我们现在可以写一个有参数的构造方法,用来初始化对象属性;
1 package com.java1234.chap03.sec04;
* 定义人类
* @author user
8 public class People {
<span style="color: #
// 定义属性
<span style="color: #
private S // 实例化对象时,默认值是null
<span style="color: #
private int // 实例化对象时,默认值是0
<span style="color: #
<span style="color: #
<span style="color: #
* 默认构造方法
<span style="color: #
<span style="color: #
<span style="color: #
System.out.println("默认构造方法!");
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
* 有参数的构造方法
<span style="color: #
* @param name2
<span style="color: #
* @param age2
<span style="color: #
<span style="color: #
People(String name2,int age2){
<span style="color: #
System.out.println("调用的是有参数的构造方法");
<span style="color: #
name=name2;
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
public void say(){
<span style="color: #
System.out.println("我叫:"+name+",我今年:"+age);
<span style="color: #
<span style="color: #
<span style="color: #
public static void main(String[] args) {
<span style="color: #
// People people=new People();
<span style="color: #
People people=new People("张三",20);
<span style="color: #
people.say();
<span style="color: #
<span style="color: # }
调用的是有参数的构造方法
我叫:张三,我今年:20
这里我们定义了一个有参数的构造方法,参数有name2 age2,当调用构造方法的时候,用于赋值给name和age属性;
1,假如没有构造方法,系统会自动生成一个默认的无参构造方法;
上代码,我们去掉刚才定义的People(){}&
1 package com.java1234.chap03.sec04;
* 定义人类
* @author user
8 public class People {
<span style="color: #
// 定义属性
<span style="color: #
private S // 实例化对象时,默认值是null
<span style="color: #
private int // 实例化对象时,默认值是0
<span style="color: #
<span style="color: #
<span style="color: #
* 默认构造方法
<span style="color: #
<span style="color: #
/*People(){
<span style="color: #
System.out.println("默认构造方法!");
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
* 有参数的构造方法
<span style="color: #
* @param name2
<span style="color: #
* @param age2
<span style="color: #
<span style="color: #
/*People(String name2,int age2){
<span style="color: #
System.out.println("调用的是有参数的构造方法");
<span style="color: #
name=name2;
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
public void say(){
<span style="color: #
System.out.println("我叫:"+name+",我今年:"+age);
<span style="color: #
<span style="color: #
<span style="color: #
public static void main(String[] args) {
<span style="color: #
People people=new People();
<span style="color: #
//People people=new People("张三",20);
<span style="color: #
people.say();
<span style="color: #
<span style="color: # }
我们把两个构造方法注释了,运行的话,依然没问题。
2,假如有构造方法,系统不会自动生成构造方法;
假如我们单独去掉无参数的构造方法,上代码:
1 package com.java1234.chap03.sec04;
* 定义人类
* @author user
8 public class People {
<span style="color: #
// 定义属性
<span style="color: #
private S // 实例化对象时,默认值是null
<span style="color: #
private int // 实例化对象时,默认值是0
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
* 有参数的构造方法
<span style="color: #
* @param name2
<span style="color: #
* @param age2
<span style="color: #
<span style="color: #
People(String name2,int age2){
<span style="color: #
System.out.println("调用的是有参数的构造方法");
<span style="color: #
name=name2;
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
public void say(){
<span style="color: #
System.out.println("我叫:"+name+",我今年:"+age);
<span style="color: #
<span style="color: #
<span style="color: #
public static void main(String[] args) {
<span style="color: #
People people=new People();
<span style="color: #
//People people=new People("张三",20);
<span style="color: #
people.say();
<span style="color: #
<span style="color: # }
我们会发现编译报错了:
The constructor People() is undefined
说找不到People()构造方法&
this关键字
this表示当前对象
1,使用this调用本类中的属性和方法;
2,使用this调用构造方法;
我们上面的例子
<span style="color: # People(String name2,int age2){
<span style="color: #
System.out.println("调用的是有参数的构造方法");
<span style="color: #
name=name2;
<span style="color: #
<span style="color: # }
构造方法的属性名和类里的属性名不一致; 假如说我们搞成一致;
这里警告的意思 是自己赋值给自己 没有意义,这里的name和age变量 作用范围在方法里 所以和类里的属性名搭不上边;
我们如何才行指定类里的属性呢,这时候this关键字派上用场了。
我们可以用this关键字类执行当前对象 &this.属性 实现;
1 package com.java1234.chap03.sec04;
* 定义人类
* @author user
8 public class People {
<span style="color: #
// 定义属性
<span style="color: #
private S // 实例化对象时,默认值是null
<span style="color: #
private int // 实例化对象时,默认值是0
<span style="color: #
<span style="color: #
<span style="color: #
* 默认构造方法
<span style="color: #
<span style="color: #
/*People(){
<span style="color: #
System.out.println("默认构造方法!");
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
* 有参数的构造方法
<span style="color: #
* @param name
<span style="color: #
* @param age
<span style="color: #
<span style="color: #
People(String name,int age){
<span style="color: #
System.out.println("调用的是有参数的构造方法");
<span style="color: #
this.name=
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
public void say(){
<span style="color: #
System.out.println("我叫:"+name+",我今年:"+age);
<span style="color: #
<span style="color: #
<span style="color: #
public static void main(String[] args) {
<span style="color: #
// People people=new People();
<span style="color: #
People people=new People("张三",20);
<span style="color: #
people.say();
<span style="color: #
<span style="color: # }
假如在我们还有需求,在构造方法中调用另外一个构造方法,比如默认构造方法里是基本的初始化,有参数的构造方法是附加初始化,
再调用有参数的构造方法时候,我们先调用无参数构造方法,实现基本初始化,然后再进行附加初始化,这时候this关键字又派上用场了,
我们调用this()就是调用无参数构造方法,括号里也可以加参数,来调用有参数的构造方法。
1 package com.java1234.chap03.sec04;
* 定义人类
* @author user
8 public class People {
<span style="color: #
// 定义属性
<span style="color: #
private S // 实例化对象时,默认值是null
<span style="color: #
private int // 实例化对象时,默认值是0
<span style="color: #
<span style="color: #
<span style="color: #
* 默认构造方法
<span style="color: #
<span style="color: #
<span style="color: #
System.out.println("默认构造方法!");
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
* 有参数的构造方法
<span style="color: #
* @param name
<span style="color: #
* @param age
<span style="color: #
<span style="color: #
People(String name,int age){
<span style="color: #
this(); // 调用无参数的构造方法
<span style="color: #
System.out.println("调用的是有参数的构造方法");
<span style="color: #
this.name=
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
public void say(){
<span style="color: #
System.out.println("我叫:"+name+",我今年:"+age);
<span style="color: #
<span style="color: #
<span style="color: #
public static void main(String[] args) {
<span style="color: #
// People people=new People();
<span style="color: #
People people=new People("张三",20);
<span style="color: #
people.say();
<span style="color: #
<span style="color: # }
默认构造方法!
调用的是有参数的构造方法
我叫:张三,我今年:20

我要回帖

更多关于 java面向对象的理解 的文章

 

随机推荐